簡體   English   中英

Hapi v17-文件響應的Joi模式

[英]Hapi v17 - Joi schema for file responses

如何為要作為響應發送的文件編寫Joi模式?

我的路線返回此return h.file(filename, { mode: 'attachment'}).code(201); 而且, content-dispostion響應標頭是attachment; filename=entries.csv attachment; filename=entries.csv

我也許可以檢查即將發出的響應的對象結構,但是Joi有沒有辦法提供一種屬性來檢查響應中的文件?

這是您可能想跟蹤的Github問題

我誤解了這個問題-這是關於驗證響應標頭,而不是請求標頭。 簡短的回答: 這是不可能的。

長答案:

基於hapijs 17.5.3 https://hapijs.com/api#-routeoptionsresponseoptions,它似乎可以通過以下功能實現:

server.route({
    method: 'GET',
    path: '/file',
    options: {
        handler: (request, h) => {

            return h.file('foobar.csv', { mode: 'attachment'}).code(201);
        },
        response: {
            schema: async (value, options) => {

                console.log('validating response:', value);
            }
        }
    }
});

但是這種方法不行 hapijs不支持它,您將從第151行得到一個異常: https : //github.com/hapijs/hapi/blob/76fcd7fa97747c92501b912d64db459d7172cb26/lib/validation.js ,它是:

if (!response.isBoom &&
    request.response.variety !== 'plain') {

    throw Boom.badImplementation('Cannot validate non-object response');
}

這是您可以驗證請求標頭的方法:

'use strict';
const Joi = require('joi');
const ErrorHandler = require('../handlers/errorHandler');

const fileUploadValidator = {
    config: {
        validate: {
            params: {
                env: Joi.string().min(2).max(10).required()
            },
            query: {
                id: Joi.number().integer().min(0).required()
            },
            headers: Joi.object({
                'x-request-id': Joi.string().guid().required(),
                'content-disposition': Joi.string().regex(/attachment;\s*filename=.+\.csv/gi).insensitive().required()
            }).options({ allowUnknown: true }),
            failAction: ErrorHandler.apply_genericHandler
        }
    }
};

module.exports = fileUploadValidator;

路線定義:

server.route({
    method: 'POST',
    path: '/{env}/v1/fileUpload',
    handler: FileUploadHandler.apply,
    options: FileUploadValidator.config
});

您可能需要稍微調整一下。 我是根據您的問題制作的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM