如何在 Express.js 中将 Celebrate 验证错误记录到控制台?
How to log Celebrate validation errors to the console in Express.js?
我有一个 Express.js 应用程序,我在其中尝试将 Celebrate 返回的验证错误记录到控制台,以便我可以使用我使用的日志记录服务(它是 GCP 的云日志记录)。
我目前只是按照文档中的建议使用 Celebrate 提供的错误处理中间件:
// app.js
const { errors } = require('celebrate');
...
app.use(errors());
...
如何扩展中间件(无需重新实现它)以便它也将验证错误记录到控制台?
实现这一点的最简单方法似乎是在 Celebrate 错误中间件 之前定义另一个错误中间件 ,它检查错误是否是 Celebrate 错误(使用 isCelebrateError
方法),如果是这样,它会将其记录到控制台:
// app.js
const { errors, isCelebrateError } = require('celebrate');
...
// middleware to log Celebrate validation errors
app.use((err, req, res, next) => {
if (isCelebrateError(err)) {
console.error(err);
}
next(err);
});
// Celebrate middleware to return validation errors
app.use(errors());
...
在 Celebrate 的 errors()
中间件之前包含日志记录中间件很重要,因为 errors()
returns 一个 JSON 响应并且 运行 之后没有其他中间件它(您可以查看 Celebrate source code 了解 errors()
的实施细节)。
我有一个 Express.js 应用程序,我在其中尝试将 Celebrate 返回的验证错误记录到控制台,以便我可以使用我使用的日志记录服务(它是 GCP 的云日志记录)。
我目前只是按照文档中的建议使用 Celebrate 提供的错误处理中间件:
// app.js
const { errors } = require('celebrate');
...
app.use(errors());
...
如何扩展中间件(无需重新实现它)以便它也将验证错误记录到控制台?
实现这一点的最简单方法似乎是在 Celebrate 错误中间件 之前定义另一个错误中间件 ,它检查错误是否是 Celebrate 错误(使用 isCelebrateError
方法),如果是这样,它会将其记录到控制台:
// app.js
const { errors, isCelebrateError } = require('celebrate');
...
// middleware to log Celebrate validation errors
app.use((err, req, res, next) => {
if (isCelebrateError(err)) {
console.error(err);
}
next(err);
});
// Celebrate middleware to return validation errors
app.use(errors());
...
在 Celebrate 的 errors()
中间件之前包含日志记录中间件很重要,因为 errors()
returns 一个 JSON 响应并且 运行 之后没有其他中间件它(您可以查看 Celebrate source code 了解 errors()
的实施细节)。