Пользовательское сообщение об ошибке проверки на hapi с помощью joi - PullRequest
0 голосов
/ 26 мая 2020

Я использую пользовательское сообщение об ошибке проверки на hapi с помощью joi.

    server.route({
        path: '/test/inputname',
        method: ['PUT','POST'],
        handler: async (request, h) => {
            try{
                const created =  await MemberSchema.addUser(
                    {"input_name": request.payload.input_name}
                )
                return h.response(created).code(201);
            } catch(err){
                console.log(err.message);
                return h.response(err.message).code(400);
            }
        },
        options: {
            validate: {
                payload: Joi.object({
                    input_name: Joi.string()
                        .min(2)
                        .max(30)
                        .required()
                        .messages({
                            'string.base' : `"input_name" should be a type of 'text'`,
                            'string.empty' : `"input_name" cannot be an empty field`,
                            'string.min' : `"input_name" should have a minimum length of {#limit}`,
                            'any.required' : `"input_name" is a required field`,
                        }),
                }),
                options:{
                    allowUnknown: true
                    ,abortEarly: false
                }
            }
        }
    });

Однако, когда я публикую недопустимые данные, они всегда отображаются следующим образом. решить?

ps Я использую следующую версию.

node v12.16.2
"@hapi/hapi": "^19.1.1",
"@hapi/joi": "^17.1.1",

1 Ответ

0 голосов
/ 31 мая 2020

Может потребоваться FailAction.

    options: {
        validate: {
            payload:  MemberSchema.memberSchema
            ,options:{
                allowUnknown: true
                ,abortEarly: false
            }
            ,failAction: async (request, h, err) => {
                console.log(err);
                throw err;
            }
        }
    },

Затем сообщение изменилось следующим образом.

{
    "statusCode": 400,
    "error": "Bad Request",
    "message": "\"input_name\" should have a minimum length of 2",
    "validation": {
        "source": "payload",
        "keys": [
            "input_name"
        ]
    }
}
...