【发布时间】:2021-09-12 17:41:28
【问题描述】:
使用 express,我有多个需要中间件的路由。它们不在任何常见的/url/path下。
路由器级中间件的工作方式与应用级中间件相同,只是它绑定到 express.Router() 的实例
当我读到它时,这意味着中间件仅适用于路由器实例的路由。但似乎并非如此。
在以下示例中,我希望仅为http://localhost:10000/router 记录“路由器调用”。
但它也被记录为http://localhost:10000/noRouter,我不明白。为什么router 实例的中间件used 会被直接添加到app 的路由调用?是否可以创建一个Router,以便只有绑定到该Router 的路由才能应用中间件?
const express = require('express')
const app = express()
const port = 10000
const router = express.Router();
router.use((req, _res, next) => {
console.log("router called")
next()
})
app.use(router)
router.get('/router', (req, res) => {
res.send("ok")
})
app.get('/noRouter', (req, res) => {
res.send("ok")
})
app.listen(port, () => {
console.log(`Listening at http://localhost:${port}`)
})
P.S.:我没有被卡住,而是使用不同的方法让它工作。我只是想了解为什么这不起作用...
【问题讨论】:
-
因为中间件的first,不限于特定的路由,并且调用next - 这就是应该发生的。
-
@jonrsharpe:嗯。我平时不厚,但我还是不明白。您已将
first以斜体字表示,但first仅在我理解的不相关上下文中出现在Router-level middleware 中一次。我仍然不明白我的中间件函数“绑定到 express.Router() 的实例”是什么意思。但是感谢您尝试启发我! :-)