如何在 Hapi Joi 中指定 HTTP 错误 422 而不是 400

How to specify HTTP error 422 instead of 400 in Hapi Joi

有没有办法改为获取状态 4​​22 https://github.com/hapijs/joi

中的 400 个

更新

@Matt Harrison 回复后

要在全球范围内应用逻辑,您可以 你的 index.js

server.ext('onPreResponse', function (request, reply) {
    var req = request.response;
    if (req.isBoom && (req.output.statusCode===400)) {
            return reply(Boom.badData(req.output.payload.message));
    }
        return reply.continue();
});

Joi 本身不知道也不关心 HTTP 或状态代码。它仅用于验证 JavaScript 值。

但我猜您正在将 Joi 与 hapi 结合使用。在这种情况下,它是 hapi 给你一个 400。你可以通过在验证 config.

中使用 failAction 属性 来覆盖它

您还可以使用 Boom 创建 HTTP 友好的 422 错误。

var Boom = require('boom');

server.route({
    config: {
        validate: {
            ...
            failAction: function (request, reply, source, error) {

                reply(Boom.badData('Bad data', error.data));
            }
        }
    },
    method: 'GET',
    path: '/',
    handler: function (request, reply) {

        ...
    }
});