我正在尝试使用express运行错误处理,而不是看到"错误!!!"的响应 就像我希望我在控制台上看到"一些异常"然后该过程被杀死.这是错误处理应该如何设置,如果是这样,还有另一种方法来捕获错误?
var express = require('express');
var app = express();
app.use(function(err, req, res, next) {
console.log("error!!!");
res.send("error!!!");
});
app.get('/', function(request, response) {
throw "some exception";
response.send('Hello World!');
});
app.listen(5000, function() {
console.log("Listening on 5000");
});
Run Code Online (Sandbox Code Playgroud)
Ben*_*ans 24
有关错误处理的示例应用程序/指南,请访问 https://expressjs.com/en/guide/error-handling.html 但是应该修复您的代码:
// Require Dependencies
var express = require('express');
var app = express();
// Middleware
app.use(app.router); // you need this line so the .get etc. routes are run and if an error within, then the error is parsed to the next middleware (your error reporter)
app.use(function(err, req, res, next) {
if(!err) return next(); // you also need this line
console.log("error!!!");
res.send("error!!!");
});
// Routes
app.get('/', function(request, response) {
throw "some exception";
response.send('Hello World!');
});
// Listen
app.listen(5000, function() {
console.log("Listening on 5000");
});
Run Code Online (Sandbox Code Playgroud)
一些提示:
1)您的代码无法正常工作,因为错误处理程序中间件是在您的路由到达之前运行的,因此错误处理程序从未有机会将错误传递给它.这种风格被称为延续传递.将错误处理程序放在中间件堆栈中.
2)当出现未处理的错误时,应关闭服务器.最好的方法是调用server.close()服务器是做的结果var server = http.createServer(app);
这意味着,你应该这样做:
var server = http.createServer(app);
app.use(function(err, req, res, next) {
console.log("error!!!");
res.send("error!!!");
server.close();
});
Run Code Online (Sandbox Code Playgroud)
您可能还应该超时server.close(),以防它无法完成(毕竟您的应用程序处于未定义状态):
var server = http.createServer(app);
app.use(function(err, req, res, next) {
console.log("error!!!");
res.send("error!!!");
server.close();
setTimeout(function () {
process.exit(1);
}, 3*1000);
});
Run Code Online (Sandbox Code Playgroud)
我创建了一个为您完成所有这些工作的库,并允许您定义自定义响应,包括专门的错误视图,要提供的静态文件等等:
https://github.com/ericelliott/express-error-handler
| 归档时间: |
|
| 查看次数: |
24650 次 |
| 最近记录: |