Express.js:从路由处理程序调用下一个(错误)是否调用全局error handling中间件?
比方说,我已经定义了以下中间件和路由处理程序:
app.use(function(err,req,res,next) { res.status(500).send('Something broke!'); }); app.get('/test',function(req,res) { //some error happens here, and ther "error" object is defined next(error); });
error handling中间件得到调用吗?
如果不是的话,error handling中间件会被调用
- error handling中间件是在路由处理器之下定义的?
- 我使用
throw error;
而不是下next(error);
? - 以上都是真的吗?
或者我应该这样做:
//route.js module.exports=function(req,res,next) { //error happens here next(error); } //errorHandler.js module.exports=function(err,req,res,next) { res.status(500).send('Something broke!'); } //app.js var route=require('route'); var errorHandler=require('erorHandler'); app.get('/test',[route,errorHandler]);
我现在有点困惑…
中间件,app.get,app.post等的顺序很重要 ,它们按照它们在代码中添加的顺序进行处理。
所以当你像你这样定义它
app.use(function(err,req,res,next) { res.status(500).send('Something broke!'); }); app.get('/test',function(req,res) { //some error happens here, and ther "error" object is defined next(error); });
第一个中间件将捕获所有的请求,并返回状态500,所以它永远不会到达app.get('test'...
error handling程序应该总是在你的代码的底部,所以如果在某个路由处理程序中出现错误,你将调用next(error)
,error handling程序将响应客户端的消息,如res.status(500).send('Something broke!');
和这个
app.get('/test',[route,errorHandler]);
实际上是不好的,因为你需要在每条路线上使用它
好:
app.get('/test',function(req,res,next) { //some error happens here, and ther "error" object is defined next(error); }); app.use(function(err,req,res,next) { res.status(500).send('Something broke!'); }); app.listen(8000);
- 我如何知道Mongoose addToSet实际上添加了什么?
- nodejs ExpressJS路由只适用于索引
- 在Express.js中,如何渲染不带“响应”对象的Jade局部视图?
- 我是否实现序列化和反序列化NodesJS + Passport + RedisStore?
- angularjs $ cookieStore SyntaxError:JSON.parse:意外字符
- 有人可以帮我删除我的Db Sequelizelogging吗?
- 使用Express提交您的提交中的gitignore API密钥的最佳做法是什么?
- expression和压缩,找不到我所犯的错误:-(
- 在express中设置ejs的查看文件夹的查找path