我正在尝试使用路由器中间件来获取req.route的值。我有一些像这样的简单代码:
server.js
import api from './api';
// ...
app.use('/api/', api);
api / index.js
Object.keys(routes).forEach(key => {
router.use(function(req, res, next) {
console.log('++++++++++++++++++');
console.log(req.route);
console.log('++++++++++++++++++');
next();
});
// so localhost:8080/api/currentkey works
router.use(`/${key}`, routes[key]);
});
当我按下/api/currentkey
时,req.route
是不确定的。如果我将中间件移到路径定义之后(而不是之前),则似乎根本不会触发。
我的路由器对象都是使用这样的方法设置的:
import express from 'express';
import asyncify from 'express-asyncify';
export default function() {
return asyncify(express.Router());
}
我看到了使用Get route definition in middleware上的事件的解决方案,但想知道为什么需要这样做与我在这里所做的事情。我也不确定它的编写方式是否会使事情准确(例如更改新文物的交易名称)
答案 0 :(得分:1)
是的。 req.route
仅在您的最终 route
中可用。从文档中:
包含当前匹配的路由,字符串
请注意粗体中的单词,您登录req.route
的中间件不是route
。
所以可以这样说:
app.get('/path', (req, res) => {
console.log(req.route);
})
由于req
对象在传递middleware
时发生了突变,因此您可以访问req.route
来匹配 last 匹配的route
。例如:
app.get('/path', (req, res, next) => {
res.send('hello');
next() // <-- calling next middleware
})
// middleware mounted after the above route
app.use((req, res, next) => {
console.log(req.route) // outputs the last matched at /path route
})
答案 1 :(得分:0)
您可以像::
它在koa中效果很好,但在快递中不确定::
app.use(async (req, res, next)=> {
// Do your work
await next(); // This will work fine, wait for next route/middleware
});
app.get('/path', (req, res, next) => {
res.send('hello');
next()
})