我有一个Express.js 4应用程序,错误记录了以下形式的中间件:
...
const logErrors = (err, req, res, next) => {
logger.error(err);
res.status(400).json({ error: err.message });
}
app.use(logErrors);
我之前处于(错误的)假设之下,通过不调用next()
,请求将不会继续到我的路由处理程序。事实并非如此,因为发生错误时,会将其记录并作为响应发送给用户,但请求会继续/myroutehandler
,从而导致问题。
在我记录并响应中间件中的错误后,如何停止路由/中间件链?或者正确的方法是什么?
奖金问题:由于我没有打电话next()
,请求是否应该挂起?怎么/为什么快递处理这个?
编辑:
我的更多代码,找出请求从中间件跳转到路由的原因
app.use(morgan('combined', { stream: logger.inputStream }));
app.use(authMiddleware);
app.use(xmlParser({
normalize: false,
normalizeTags: false,
trim: true,
mergeAttrs: true,
explicitArray: false
}));
app.use(logErrors);
app.post('/HotLeadsFeed', async (req, res) => {
if (!req.body || !req.body.pi || !req.body.pi.pa) {
//error logging
}
try {
//logic
} catch (err) {
//error handling
}
});