app.use不仅用于中间件
app.use()方法 (中间件方法)
使用app.use()方法将指定的中间件功能放到指定的路径下,当请求的路径地址(前端发过来的地址)与定义的路由(app.get/post)相同时,就会执行指定的中间件功能。需要注意的是,如果路由有多个子路由同样也会执行对应的中间件函数。
//这种类型的中间件访问什么路由都会执行
app.use((req,res,next)=>{
console.log('11111')
next()
})
语法:
app.use([path], callback, [callback])
参数解析:
- path : 指定的中间件函数的放的路径(路由地址),可选参数。
- callback : 指定的中间件函数,可以是多个。并且这些回调函数可以调用next().
//创建app
const app = express()
//设置中间件
app.use("/index",(req,res,next)=>{
console.log("中间件函数");
next();
})
//设置路由
app.get('/index',(req,res)={
console.log("中间件执行完后,执行该函数");
res.send("end");
})
与下面代码进行区别 (中间件没有next)
const app = express()
//设置中间件
app.use("/index",(req,res,next)=>{
console.log("中间件函数");
})
//设置路由
app.get('/index',(req,res)={
console.log("中间件没有调用next,此函数不会被执行");
res.send("end");
})
第一个实例调用了next(),所以能执行路由函数,而第二个例子中没有调用next(),所以不会执行路由函数(中间件没有调用next,此函数不会被执行)
下面我们来看有路由有多个子路由的情况
假如/index还有子路由
- /index/h
- /index/x
我们就可以将这三个路由进行封装,暴露出一个路由接口。
const express = require('express')
const router = express.Router()
router.get("/index",(req,res)=>{
res.send("我是index")
})
router.get("/h",(req,res)=>{
res.send("我是h")
})
router.get("/x",(req,res)=>{
res.send("我是x")
})
module.exports = router;
使用时导入路由模块。
const router = require(./router)
const express = require('express')
const app = express()
app.use('/index',router)
小结
使用app.use来匹配对应的路由,执行相应的中间件函数==>app.use中的地址应与app.get/post一致才是这个路由的中间件 若没写地址则对全部路由都生效的中间件
注意区分有无next的区别,如果一个路由还含有多个子路由时,可以进行封装,暴露出一个统一的接口。
在我们使用router不用暴露一个统一接口 你的跟路由就是暴露的路由若是这个跟路由则进入router中的index.js
app.use('/', require('./router'))