出现了一系列代码执行,我发现这里不寻常的是代码:
服务器.js
const Actions_Single_PVC = require('./routes/Actions_single_PVC.js');
app.use('/Actions_single_PVC', Actions_Single_PVC);
app.use((err, req, res, next) => {
console.log('invalid token');
});
Actions_single_PVC.js
router.post('/', asyncMW(async (req, res, next) => {
throw new Error();
}));
router.use((err, req, res, next) => {
console.log('error');
}
如果你以前从未见过这种结构,这里是 asyncMW:
const asyncMiddleware = fn =>
(req, res, next) => {
Promise.resolve(fn(req, res, next))
.catch(next);
};
module.exports = asyncMiddleware;
我不明白的是,当抛出错误时(我在这里用 复制了它throw new Error();
),文件中的错误处理中间件 server.js
会被执行。我预计 Actions_single_PVC.js
会执行错误处理中间件。
问题:
为什么server.js
执行错误中间件而不是错误中间件Actions_single_PVC.js
?