express中间件、路由详解

中间件的概念

Express的中间件,本质上就是一个function处理函数,Express中间件格式如下

app.get('/',function(req,res,next){
    next()
})

// 全局生效中间件
app.use(function (req,res,next){
    console.log('这是一个最简单的中间件函数')
    next()
})

// 局部生效中间件
const mw = function (req,res,next){
    req.results = [1,2] // 供后续中间件使用
    next()
}
// mw 这个中间件只能在当前路由中生效
app.get('/',mw,function(req,res,next){
    next()
})
// mw 这个中间件不会影响下面这个路由
app.get('/user',mw,function(req,res,next){
    next()
})

注意:中间件函数的形参列表中,必须包含 next 参数。而路由处理函数中只包含 req 和 res。

next 函数的作用
next 函数 是实现多个中间件连续调用的关键,它表示把流转关系转交给下一个中间件。

中间件的作用
多个中间件之间,共享同一份 req 和 res 。基于这样的特征,我们可以在上游的中间件中,统一为 req 或 res 对象添加自定义的属性或方法,供下游的中间件或路由进行使用。

路由的使用

创建路由模块 router.js

const express = require("express");
const router = express.Router();

router.get("/user",(req,res)=>{})

module.exports = router;

注册路由模块 app.js

// 导入路由模块
const userRouter = require("./router.js")
// 注册路由模块
app.use(userRouter)

// 加入前缀
app.use("/api", userRouter);

获取URL中携带的查询参数
通过 req.query对象可以访问到客户端通过查询字符串的形式,发送到服务器的参数

app.get('/',(req,res)=>{
    // req.query默认是一个空对象
    // 获取 ?name=zs&age=20这种形式的参数
    console.log(req.query)
})

获取URL中的动态参数
通过 req.params对象,可以访问到URL中通过 : 匹配到的动态参数

// URL地址中,可以通过:参数名的形式匹配动态参数值
app.get('/user/:id',(req,res)=>{
    // req.params 默认是一个空对象
    // 里面存放这通过 : 动态匹配到点的参数值
    console.log(req.params)
})

express.static()
express.static函数可以非常方便的创建一个静态资源服务器,通过如下代码就可以将public目录下的图片、css文件、js文件对外开放访问。

const express = require("express");
const app = express();

app.use(express.static('public'))
// 现在,你就可以访问 public 目录中的所有文件了
// http://localhost:3000/images/bg.jpg
// http://localhost:3000/css/style.css
// http://localhost:3000/ijsmages/login.js

// 托管多个静态资源目录,只需多次调用
app.use(express.static('public'))
app.use(express.static('files'))

// 如果希望在托管静态资源访问路径之前,挂载路径前缀
app.use('/public',express.static('public'))
// http://localhost:3000/public/images/bg.jpg

注意:Express在指定的静态目录中查找文件,并对外提供资源的访问路径。因此,静态文件的目录名不会出现在URL中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值