【发布时间】:2016-05-08 21:40:20
【问题描述】:
我正在使用 Express 构建一个示例网站,但遇到了一些我不太理解的问题。
如果我理解正确,错误处理中间件应该是管道中的最后一个。例如,工作得很好:
var http = require('http');
var express = require('express');
var app = express();
app.set('view engine', 'jade');
app.set('views', './views');
app.use(express.static('./public'));
http.createServer(app).listen(portNumber, function() { });
app.get('/hello', function(req, res) {
res.send('Welcome!');
});
app.use(function(err, req, res, next) {
res.status(500).send('something broke!');
});
app.get('/error', function(req, res, next) {
somethingNonExistent(2016);
});
但是,如果我在调用 http.createServer 之前注册了该中间件,但在注册了所有其他中间件之后,它将无法工作 - 我的代码不会被调用:
var http = require('http');
var express = require('express');
var app = express();
app.use(express.static('./public'));
app.use(function(err, req, res, next) {
res.status(500).send('something broke!');
});
http.createServer(app).listen(portNumber, function() { });
app.get('/hello', function(req, res) {
res.send('Welcome!');
});
app.get('/error', function(req, res, next) {
somethingNonExistent(2016);
});
我在这里错过了什么?我的猜测是 app.get 调用在内部使用了一些中间件并且它被搞砸了。
我使用 Express 3.2.6 和 Node.js 0.10.29,如果这有什么不同的话
【问题讨论】:
-
请评论否决票
-
我不确定是否有否决票,但阻止我花时间回答的是无关紧要的额外代码。获得答案的最佳方式是发布您能想到的最简单的用例,而不是发布您的整个应用程序。没有人真正喜欢调试,更不用说调试别人的代码了。您不需要控制台记录端口、设置环境配置、数学来计算一天的长度等。
var app = express();app.use(something); app.get("/hello",...); /*your attempt at error handling*/ -
@cdbajorin 点。我会更新帖子
-
@chester89 createServer 前段时间已弃用。有关基本示例,请参阅 Express 文档 (expressjs.com/en/starter/hello-world.html)
-
@chester89 值得注意的是,在 Express 4 中,两种情况下都没有处理错误
标签: node.js express error-handling