猿问

express路由层中间件

var express = require('express')var app = express()var router = express.Router()

router.use(function (req, res, next) {  if (!req.headers['x-auth']) return next('router')
  next()
})

router.get('/', function (req, res) {
  res.send('hello, user!')
})

app.use('/admin', router, function (req, res) {
  res.send('401')
})

app.use('/', router)
app.listen(3000)

这是express官方文档上的一个例子,
1、router.use挂载了一个中间件,用于检查请求头,由于没有指定路径和方法,所以请求所有路径和方法都会执行它。
2、我请求localhost:3000/的时候,没有加x-auth请求头,会输出一个错误的网页,加了请求头,会输出'hello, user!',这部分我可以理解。
3、但在在请求localhost:3000/admin的时候,没有加请求头会返回401,但是为什么加了请示头,会输出 'hello, user!',一个是请求'/',一个是 '/admin',这两个毫无关联呀???
4、使用 return next('router') 这个会返回到哪边呢?


月关宝盒
浏览 459回答 1
1回答

森栏

没有 next('router') 的写法, 是 next('route'). 作用是跳过当前匹配路由的回调. 在你的例子中就是跳过 '/admin' 的路由回调, 寻找下一个匹配的路由, 也就是 '/'.
随时随地看视频慕课网APP

相关分类

Node.js
我要回答