在开发 Web 应用程序时,出现错误是不可避免的。在 Express.js 中,错误处理很关键,因为未处理的错误可能会影响整个应用程序。在本文中,我们将介绍如何正确处理在 Express.js 中的错误。
错误的类型
在 Express.js 中,有两种类型的错误:可预测错误和不可预测错误。可预测错误通常是由用户的错误输入引起的,如无效的参数、缺少的输入、非法的请求等。不可预测错误可能是由系统错误、网络问题、服务器崩溃等引起的。
错误处理的三个方面
在处理错误时,我们需要考虑以下三个方面:
日志记录
日志记录是记录错误信息的一个很好的方法。当出现错误时,应该记录错误信息和错误发生的上下文,例如 URL、HTTP 方法和请求头等。这些记录对故障排除非常有帮助。在 Express.js 中,可以使用 morgan、winston 或 bunyan 等日志库。
回复客户端的错误信息
回复客户端正确的错误信息是很重要的。客户端应该知道错误的类型、原因和适当的解决方法。在 Express.js 中,通常使用 HTTP 状态码来回复错误信息。例如,404 状态码表示找不到请求资源,500 状态码表示服务器内部错误。
防止应用程序崩溃
未处理的错误可能会导致应用程序崩溃。在 Express.js 中,当出现未处理的错误时,应用程序将停止响应请求。为了防止应用程序崩溃,我们需要添加错误处理中间件来处理未处理的错误。
错误处理中间件
在 Express.js 中,错误处理中间件是一个可以处理错误的函数。当出现错误时,将调用此函数。以下是错误处理中间件的基本格式:
app.use(function(err, req, res, next) { // 处理错误 });
第一个参数是错误对象,包含有关错误的信息。第二个参数是当前的请求对象,包含有关请求的所有信息。第三个参数是响应对象,用于发送错误信息。最后一个参数是在请求处理期间使用的下一个函数。
以下是处理 404 错误的示例代码:
app.use(function(req, res, next) { res.status(404).send("Sorry, we cannot find that!"); });
以下是处理 500 错误的示例代码:
app.use(function(err, req, res, next) { console.error(err.stack); res.status(500).send('Something broke!'); });
当需要处理特定类型的错误时,可以编写自定义错误处理中间件。以下是处理特定类型错误的示例代码:
app.use(function(err, req, res, next) { if (err instanceof SyntaxError) { res.status(400).send('Bad Request'); } else { next(err); } });
当发生语法错误时,将发送 400 错误。否则,将调用下一个错误处理中间件来处理错误。
结论
正确处理错误对于构建健壮的 Web 应用程序至关重要。在 Express.js 中,我们可以使用日志记录、回复客户端错误信息和错误处理中间件来处理错误。希望本文能对您有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/671f01462e7021665efb1ba6