Проверка formData Joi не удалась, когда мы используем вложенный объект - PullRequest
1 голос
/ 09 июля 2020

Проблема Я работаю над операцией загрузки файлов на новой платформе hapi JS с последней версией hapi-swagger. Старая версия поддерживается правильно, но теперь у меня возникла проблема, когда я использую hapi- форма типа полезной нагрузки swagger. Я что-то пропустил?

Используемые библиотеки hapi-hapi 19.1.1 hapi-Joi: 17.1.1 Hapi-swagger: 13.0.2 Узел: 12.18.1

const Joi = require("@hapi/joi");

// Route file
app.route({
    method: 'POST',
    path: '/fileUpload/{format}',
    options: Controller.fileUpload()
});

    // Controller file
    public fileUpload(): Hapi.RouteOptions{
    return {
        handler: async (request: any, h: Hapi.ResponseToolkit) => {
            try {
                let file = request.payload.file
                let data = request.payload.data
                let fileFormat = request.params.format
                //some logic
            } catch (err) {
                throw error;
            }
        },
        tags: ['api', 'fileUpload', 'POST'],
        description: 'file uploading',
        plugins: {
            'hapi-swagger': {
                payloadType: 'form'
            }
        },
        validate: {
            params: Joi.object({
                format: Joi.string().required().description('Format of file').example('docx, xml or html').allow('docx', 'xml', 'html')
            }),
            payload: Joi.object({
                data: Joi.object({
                    objectData: Joi.object({
                        objectName: Joi.string().required().description('Name of object').example('xyz').disallow('null', 'undefined'),
                        objectRID: Joi.string().optional().example('#24:6').disallow('null', 'undefined')
                    }).required(),
                    objectTravelRelations: Joi.array().optional().items(
                        Joi.object({
                            objectName: Joi.string().required().description('Class of Object').disallow('null', 'undefined'),
                            objectUID: Joi.string().required().example('873cc6cd-d51d-44d0-8377-2061641a11a3').disallow('null', 'undefined'),
                            relation: Joi.string().required().description('Name of the relation').example('HasChild').disallow('null', 'undefined'),
                            direction: Joi.string().required().description('Direction of relation').example('in').allow('in', 'out').disallow('null', 'undefined')
                        }).required()
                    )
                }),
                file: Joi.any()
                    .meta({ swaggerType: 'file' }).required()
                    .description('file.')
            }),
            options: {
                allowUnknown: true
            },
            failAction: async (request, h, error) => {
                throw error;
            },
        },
        payload: {
            output: 'stream',
            parse: true,
            multipart: true,
            maxBytes: 10485760
        }
    };
}

Ожидаемое поведение Данные формы проверены, и файл загружен успешно.

Фактические данные поведения обработали строку, но на самом деле это сообщение объекта: ' "данные" должны иметь тип объект '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...