📜  错误处理 express - Javascript (1)

📅  最后修改于: 2023-12-03 15:42:08.583000             🧑  作者: Mango

错误处理 express - Javascript

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 中,错误处理是非常重要的,因为它能够帮助我们在程序运行时捕获并处理异常,使我们的应用程序更加稳定和可靠。采用适当的错误处理中间件,可以帮助我们更加有效地处理应用程序中的错误。