如何从中间件将错误返回给ExpressJS
在本文中,我们将讨论使用中间件将错误/异常返回给ExpressJS的问题。错误处理是指捕获和处理可能发生的同步和异步错误。幸运的是,ExpressJS自带了自己的错误处理程序,因此您无需自己编写。
中间件函数可以访问请求对象和响应对象,以及应用程序请求-响应生命周期中的下一个函数。如果同步代码引发错误(在路由处理程序和中间件内部),ExpressJS将自动捕获并处理它,您无需额外操作。
示例1: 下面的路由抛出一个错误,ExpressJS会自动捕获它(同步代码)。
const express = require("express");
const app = express();
app.get("/", function (req, res) {
throw new Error("BROKEN");
});
app.listen(3000);
输出:
示例2: 上述示例是同步代码的示例,但ExpressJS在异步处理错误时会有怎样的表现。下面的示例展示了相同的情况。
const fs = require("fs");
const express = require("express");
const application = express();
application.get("/", function (req, res, next) {
fs.readFile("/file-not-found", function (err, data) {
if (err) {
next(err); // Passing errors to Express.
} else {
// sending back the response if everything works well.
res.send(data);
}
});
});
application.listen(3000);
输出:
示例3: 下面给出了错误处理中间件;它接受四个参数而不是三个。
const fs = require("fs");
const express = require("express");
const application = express();
application.get("/", function (req, res) {
fs.readFile("/file-not-found");
});
application.use((err, req, res, next) => {
console.error(err.stack);
res
.status(500)
.send(
"<h1 style='color:green;text-align:center;'>GfG<h1/><br />" +
"<pre style='text-align:center;'>
Something broke!<pre/>"
);
});
application.listen(3000);
输出:
这样,您可以使用中间件在ExpressJS中返回错误/异常,您还可以根据自己的风格发送完整的HTML文件显示错误404或错误500。