首页 > 编程语言 >重生之我要当前端大王--node篇--02express路由,中间件

重生之我要当前端大王--node篇--02express路由,中间件

时间:2024-08-23 23:52:06浏览次数:12  
标签:node req -- app express 中间件 token 路由

重生之我要当前端大王–node篇

第一篇章 后端服务篇–nodeJS启动!

02 express路由,中间件

前言

阅读本章可学习到将接口抽离到独立模块,减少耦合,以及中间件的使用

一、路由是什么,有什么用?

路由是 Express 应用中用于处理客户端请求的规则和处理程序。每个路由可以定义一个特定的 HTTP 请求方法(如 GET、POST、PUT、DELETE 等)和 URL 路径。当 Express 应用接收到一个请求时,它会查找匹配的路由,并执行相应的处理程序。

路由的使用步骤

1.建立单独路由文件,在主入口导入使用

//userRouter.js
import express from 'express'
 const router=express.Router()//获取路由实例
router.get('/list',(req,res)=>{
    console.log(req.query)
    res.json({
        code:200,
        data:req.query.name
    })
})
export default router//导出路由

//index.js
import userRouter from './router/user.js'//导入路由
app.use('/user',userRouter)//挂载到app上

2.查看效果

使用 node index.js 启动服务器
在浏览器输入http://localhost:3000/user/list?name=小英家的牛,返回对应数据,说明我们的接口通了

在这里插入图片描述

二、中间件是什么,有什么用

Express 中间件是 Express 应用程序的核心功能之一,它允许你在处理 HTTP 请求和响应的过程中执行代码、修改请求和响应对象、结束请求-响应周期,或者调用堆栈中的下一个中间件函数

让我们用代码来邂逅一下中间件

import express from 'express'//导入express
import userRouter from './router/user.js'
const app=express()//获取express实例
app.use(express.json())//解析json数据
/**
 * req:请求体
 * res:响应体
 * next传递控制权,调用next()将控制权传递给下一个中间件,否则拦截在这个中间件
 */
app.use((req,res,next)=>{
     console.log('经过中间件');
    const token =req.headers.authorization
    if(token){
    next()//放行
    }else{
        res.send('小黑子露出马脚了吧')
    }
})

app.use('/user',userRouter)
//服务监听本地3000端口
app.listen(3000,()=>{
    console.log('express 启动!');
})
通过app.use定义了一共全局中间件,请求接口会先通过该中间件,在中间件里可以进行鉴权逻辑判断,如果有token进行next放行,否则返回错误提示

使用postman send一下看看

携带token,放行
在这里插入图片描述
如果没有携带上token,中间件会进行拦截
在这里插入图片描述

总结

看到这,你已经学会了如何使用路由模块化管理接口,以及使用中间件进行鉴权,又学习到一个小妙招,小英家的牛迫不及待给你点赞,,快和小英家的牛一起来邂逅一下路由和中间件吧,你的点赞是我更新的动力。

标签:node,req,--,app,express,中间件,token,路由
From: https://blog.csdn.net/zzy831153/article/details/141475259

相关文章

  • 如何在 Git 中安全撤销提交与更改
    文章目录前言一、GitReset1.--soft:保留变更在暂存区2.--mixed(默认选项):保留变更在工作区3.--hard:彻底丢弃所有变更二、GitRevert1.撤销单个提交2.撤销多个提交3.撤销合并提交三、实际例子总结前言在团队开发和个人项目中,代码变更是不可避免的。有时我们可......
  • C++基础干货笔记!
    目录一、C++的第一个程序:二、命名空间namespace:1.namespace的定义:2.namespace的使用三、C++输入与输出四、缺省参数 定义与注意:五、函数重载六、引用1.引用的概念2.引用的特性3.const引用 4.引用和指针的关系六、inline1.概念与使用事项:七、nullptr概念:......
  • 自动驾驶轻地图 、无地图、高精度地图
    自动驾驶中的轻地图、无地图和高精度地图各有不同的设计原则和应用特点:1.**轻地图**:通常包含基本的道路信息,如车道线和标志。设计原则是平衡地图精度与存储和计算需求。流程包括生成、更新和维护地图数据。原理是用最简化的数据提供足够的导航支持。测试时主要关注地图数据的......
  • Python的OpenCV转换图像大小
    在Python中,使用OpenCV库来转换图像大小是一个常见的操作,它可以帮助你调整图像到特定的尺寸,以适应不同的应用场景,比如图像预处理、模型输入等。下面是一个详细的代码示例,展示了如何使用OpenCV来转换图像的大小。首先,确保你已经安装了OpenCV库。如果还没有安装,可以通过pip安装:bash......
  • Datawhale X 李宏毅苹果书 AI夏令营 -《深度学习详解》Task1
    深度学习基础学习目标理解深度学习的常见概念。掌握优化神经网络的方法。找到优化神经网络失败的原因。学习调整学习率(lr)的高级方法。1、局部极小值与鞍点在局部极小值与鞍点之前,首先了解一个特殊的点-临界点。1.1临界点通常将梯度为零的点统称为“临界点”。什么时......
  • 线段树维护单调栈——区间查询版本 & 维护递减序列
    这次算是完全搞懂了吧()()(#include<bits/stdc++.h>#defineraedread#definecaclcalc#definepbpush_back#definepiipair<int,int>#defineintlonglong#definefifirst#definesesecond#definelsp<<1#definersp<<1|1usingn......
  • 「代码随想录算法训练营」第四十五天 | 图论 part3
    目录101.孤岛的总面积DFS思路BFS思路102.沉没孤岛103.水流问题104.建造最大岛屿101.孤岛的总面积题目链接:https://kamacoder.com/problempage.php?pid=1173文章讲解:https://programmercarl.com/kamacoder/0101.孤岛的总面积.html题目状态:看题解DFS思路思路:代码结构......
  • 【专题】2024数智医疗服务时代营销机遇洞察报告合集PDF分享(附原数据表)
    原文链接: https://tecdat.cn/?p=37466如今,人工智能、大数据、物联网等众多智能技术持续且深入地在医药产业中得到应用。这不仅极大地增强了医药产业的创新能力,显著提高了医疗服务的质量与效率,还有力地促进了从预防、诊断、治疗到康复的全链条数字化转型,使市场效率得到大幅提升。......
  • 【Python字典简析】
    Python字典简析Python字典(Dictionary)是一种可变的数据结构,用于存储键值对(key-valuepairs)。它具有以下特点:无序性:在Python3.6之前的版本中,字典是无序的,但3.7及之后版本中,字典是按照插入顺序存储的。可变性:字典的内容可以被修改。唯一性:字典中的键是唯一的。键必须是......
  • Android SDK is missing required platform api
    如果这个时候选择UpdateAndroidSDK以升级AndroidSDK的话,可能会弹出一个终端窗口,然后自动关闭后又重复弹该窗口,重复数次,最后还是不能成功升级AndroidSDK。线上搜的教程大部分都是叫下载AndroidStudio,可是笔者只想用Unity进行做开发。解决方法导致Unity无法升级A......