📅  最后修改于: 2023-12-03 15:42:08.583000             🧑  作者: Mango
Express 是一个流行的 Node.js 的 Web 框架,它提供了简单、快速和可定制的方式来构建 Web 应用程序。当应用程序出现错误时,Express 提供了一些内置的错误处理方式来处理这些错误,本文将介绍如何处理错误。
在 Express 中,错误处理中间件只接受四个参数,例如:
app.use(function (err, req, res, next) {
console.error(err.stack)
res.status(500).send('Something broke!')
})
在使用错误处理中间件时,该中间件必须是所有路由中间件的最后一个中间件,例如:
var bodyParser = require('body-parser');
var router = require('./router');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
// routes
app.use('/api', router);
// error handling middleware
app.use(function (err, req, res, next) {
console.error(err.stack)
res.status(500).send('Something broke!')
})
由于异步操作在运行时代码在交错运行,因此异步代码执行时的错误原则上无法使用 try ... catch 语句捕获。为此,使用 trycatch 等库可以处理异步操作的错误。例如:
const tryCatch = require('trycatch');
app.get('/', function (req, res, next) {
tryCatch(function () {
const result = JSON.parse('invalid json');
res.json(result);
}, function (e) {
next(e)
});
});
// error handling middleware
app.use(function (err, req, res, next) {
console.error(err.stack)
res.status(500).send('Something broke!')
})
当错误处理中间件被触发,错误处理中间件会接收到一个包含错误信息的 Error 对象,以便中间件处理错误信息。例如:
// routes
app.use('/api', router);
// error handling middleware
app.use(function (err, req, res, next) {
console.error(err.stack);
res.status(err.status || 500).json({
message: err.message,
error: process.env.NODE_ENV === 'production' ? {} : err
});
});
在 Express 中,错误处理是非常重要的,因为它能够帮助我们在程序运行时捕获并处理异常,使我们的应用程序更加稳定和可靠。采用适当的错误处理中间件,可以帮助我们更加有效地处理应用程序中的错误。