"next('route')" 不适用于“.use()”

"next('route')" doesn't work with ".use()"

我是不是做错了什么,或者表达不支持 next('route').use()

var express = require('express')
var app = express()

app.use([
  function (req, res, next) {
    return next('route')
  },
  function (req, res, next) {
    return res.send('sigma')
  },
])

app.use(function (req, res, next) {
  return res.send('alpha')
})

module.exports = app

这服务于字符串 sigma 并且应该服务于字符串 alpha.

更新:刚刚试过了,但效果不佳。

var express = require('express')
var app = express()

app.use('/', [
  function (req, res, next) {
    return next('route')
  },
  function (req, res, next) {
    return res.send('sigma')
  },
])

app.use('/', function (req, res, next) {
  return res.send('alpha')
})

module.exports = app

更新,这也是:

var express = require('express')
var app = express()

app.use(function (req, res, next) {
    return next('route')
},
function (req, res, next) {
  return res.send('sigma')
})

app.use(function (req, res, next) {
  return res.send('alpha')
})

module.exports = app

我能分辨出 .all 和 .use 之间的唯一区别是 .use 默认路径为 /

所以这有效:

var express = require('express')
var app = express()

app.all('/', [
  function (req, res, next) {
    return next('route')
  },
  function (req, res, next) {
    return res.send('sigma')
  },
])

app.all('/', function (req, res, next) {
  return res.send('alpha')
})

module.exports = app

根据 node issue #2591 中的讨论:由于 app.use() 定义了中间件,而不是 "route",因此 next('route')app.use() 一起使用时没有意义。