3

https://github.com/hapijs/joiで 400 ではなくステータス 422 を取得する方法はありますか

アップデート

@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();
});
4

1 に答える 1

3

Joi 自体は、HTTP やステータス コードを認識したり気にしたりしません。JavaScript の値を検証するためだけのものです。

しかし、ハピでジョイを使用していると思います。この場合、400 を返すのは hapi です。failAction検証configのプロパティを使用して、これをオーバーライドできます。

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) {

        ...
    }
});
于 2015-07-21T09:07:08.310 に答える