如何在 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() 的实施细节)。