hapijs v17 установить заголовок перед отправкой ответа в плагин - PullRequest
0 голосов
/ 26 февраля 2019

Я хочу создать плагин HapiJS для v17, чтобы добавить к ответу некоторые пользовательские заголовки, для cors, но это не имеет значения.

const cors = {
    name: 'cors',
    version: '1.0.0',
    async register(server) {
        logger.debug('Initiating CORS internal plugin...');
        const { port } = server;
        originPort = port;

        server.ext('onPreResponse', async (request, h) => {

        return h
            .response()
            .header('Access-Control-Allow-Origin', resOrigin)
            .header('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE')
            .header('Access-Control-Allow-Headers', 'Content-Type, X-Requested-With, Authorization')
            .header('Access-Control-Allow-Credentials', 'true')
            .header('Access-Control-Max-Age', 1728000);
    });
},

};

Вот что у меня естьдо сих пор.Я не думаю, что это правильно, так как я получаю ошибку.

Я также пытался:

  server.ext('onPreResponse', async (request, h) => {
        const { response } = request;

        response.header('Access-Control-Allow-Origin', resOrigin);
        response.header('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE');
        response.header('Access-Control-Allow-Headers', 'Content-Type, X-Requested-With, Authorization');
        response.header('Access-Control-Allow-Credentials', 'true');
        response.header('Access-Control-Max-Age', 1728000);

        return h.continue;
   });

Кажется, что это работает локально, но не удается во время тестирования.

console.error node_modules/hapi/lib/core.js:126
    Debug: internal, implementation, error 
        TypeError: response.header is not a function
        at header (/home/node/app/src/lib/cors.js:47:22)
        at <anonymous>
        at process._tickDomainCallback (internal/process/next_tick.js:228:7)

Как мне добиться этого в HapiJS v17?Похоже, API был полностью переработан в этой версии, и примеров того, что конкретно я пытаюсь сделать в этой версии Hapi, очень мало.

Спасибо!

1 Ответ

0 голосов
/ 27 февраля 2019

Когда вы возвращаете ошибки Boom, поведение вашего ответа меняется.Попробуйте это.

exports.plugin = {
    async register(server, options) {
        server.ext('onPreResponse', async (request, h) => {
            const {response} = request;

            if (response.isBoom) {
                response.output.headers['Access-Control-Allow-Credentials'] = 'true';
                response.output.headers['Access-Control-Allow-Methods'] = 'GET,POST,PUT,DELETE';
            } else {
                response.header('Access-Control-Allow-Credentials', 'true');
                response.header('Access-Control-Allow-Methods', 'GET,POST,PUT,DELETE');
            }

            return h.continue;
        });
    },
    name: 'cors'        
};
...