【发布时间】:2016-07-31 06:18:01
【问题描述】:
我设置了以下 Express 4 中间件堆栈:
const app = express();
const router = express.Router();
router.get('/test', testResponse);
app.use(checkAccessToken);
app.use(router);
app.use(sendResponse);
//Error Handling
app.use(function(err,req,res,next) {
// ... Do something here
});
function sendResponse(req, res) {
res.json({
data: res.locals.data,
meta: res.locals.meta
});
}
如果我使用不存在的路由(如 GET /something)调用服务器,则在调用路由器处理程序之后调用函数 sendResponse 并且调用者得到标准响应而不是通常的消息“Cannot GET /something” ,来自 finalhandler 模块。
我认为应该调用错误处理程序,但事实并非如此。
如果找不到路由,是否有办法强制路由器发出错误,或者如果路由未匹配,则检查标准响应处理程序?
我知道我可以在 res.locals 中为任何匹配的路由添加一个值,并在标准响应处理程序中检查它,但我想使用“正确”的方式来做,而不是使用解决方法.
【问题讨论】:
-
把
app.use(sendResponse);改成app.use(function(req, res, next) { next(new Error(404)); });能解决你的问题吗? . -
完全没有,因为在这种情况下,即使找到路由也会引发错误 404
-
你是在router函数中调用
next()来调用sendResponse吧? -
router 函数是标准的 express 路由器,所以是的,显然有一个 next() 调用,实际上它总是调用我的 sendResponse(现在上面添加的代码)
标签: node.js express middleware