我正在定义静态& Express中的动态路由,我已经构建了一个通用响应器来向客户端发送响应。响应者对所有路由都是全局的,因此在最后添加。
但是,当我定义静态路由时,匹配动态路由的中间件会在响应者之前添加到堆栈中。
举例说明:
server.get('/hello/test', function(req, res, next) {
console.log('/hello/test');
next();
});
server.get('/hello/:page', function(req, res, next) {
console.log('/hello/:page');
next();
});
server.use(function(req, res, next) {
res.status(200).send('test');
});
在响应者中间件被调用之前,调用curl localhost:3000/hello/test
将console.log同时'/ hello / test'和'/ hello /:page'。我只想要调用第一个匹配的路由中间件。
无论如何都要阻止这种行为吗?
答案 0 :(得分:0)
方法next()将控件传递给下一个处理程序。 您可以解决您的问题,只需从路由中删除next()调用,并将中间件放入函数中:
server.get('/hello/test', myMiddleware(req, res, next), function(req, res) {
console.log('/hello/test');
});
server.get('/hello/test_b', myMiddleware(req, res, next), function(req, res) {
console.log('/hello/test_b');
});
server.get('/hello/:page', myMiddleware(req, res, next), function(req, res) {
console.log('/hello/:page');
});
server.get('*', myMiddleware(req, res, next), function (req, res) {
res.type('txt').send('Not found');
});
function myMiddleware(req, res, next) {
console.Log("in midleware")
next();
}