Как реализовать валидацию Joi в хапи. js? - PullRequest
1 голос
/ 09 января 2020

Я просто хочу реализовать Joi в Hapi API.

server.route([
    {
        method: 'POST',
        path: '/login',
        config: {
            tags: ['login', 'auth'],
            auth: false,
            validate: {
                payload: payloadValidator,
                failAction: (req, h, source, error) => {                                                
                    console.log("Error ::: ", source.details[0].message);
                    return h.response({ code: 0, message: source.details[0].message });                        
                }
            }
        },
        handler: async (request, h) => {
            console.log(request.payload.email);
            console.log(request.payload.password);
            ...                                
        }
    }
]);

Слышу, я звоню payloadValidator.

const payloadValidator = Joi.object({
    email: Joi.string().required(),
    password: Joi.string().required()
}).options({ allowUnknown: true }); 

На самом деле я новичок с hapi и что-то упустил в своем коде. Может ли кто-нибудь помочь мне решить эту проблему?

Требуемый вывод

Если я не передам email, приложение должно выдать ошибку Email is required, и она должна совпадать с password поле также.

Ошибка:

Error ::: "email" is required Debug: internal, implementation, error Error: Lifecycle methods called before the handler can only return an error, a takeover response, or a continue signal at Request._lifecycle (/var/www/html/hapi/node_modules/@hapi/hapi/lib/request.js:326:33) at process._tickCallback (internal/process/next_tick.js:68:7)

1 Ответ

2 голосов
/ 10 января 2020

Как предполагает ошибка Методы жизненного цикла, вызываемые до того, как обработчик может вернуть только ошибку, ответ о захвате или сигнал продолжения , вы должны вернуть ответ о захвате.

return h.response({ code: 0, message: source.details[0].message }).takeover();

Для Более подробную информацию вы можете посетить по этой ссылке: ссылка ссылка

...