Ecmascript 6 hapijs v17在插件中发送响应之前设置标头
我想为v17创建一个HapiJS插件,为cors在响应中附加一些自定义头,但这不重要Ecmascript 6 hapijs v17在插件中发送响应之前设置标头,ecmascript-6,cors,hapijs,Ecmascript 6,Cors,Hapijs,我想为v17创建一个HapiJS插件,为cors在响应中附加一些自定义头,但这不重要 const cors = { name: 'cors', version: '1.0.0', async register(server) { logger.debug('Initiating CORS internal plugin...'); const { port } = server; originPort = port;
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)
console.error节点_modules/hapi/lib/core.js:126
调试:内部、实现、错误
TypeError:response.header不是函数
在标题处(/home/node/app/src/lib/cors.js:47:22)
在
在进程中。_tickDomainCallback(internal/process/next_tick.js:228:7)
如何在HapiJS v17中实现这一点?在这个版本中,API似乎已经被完全重构,并且很少有例子说明我在这个版本的Hapi中具体要做什么
谢谢 当您返回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'
};
请尝试response.setHeader()。See and No dice@sideshowbarker Debug:internal,implementation,error TypeError:response.setHeader不是server.ext(/home/node/app/src/lib/cors.js:47:22)中的函数。在我的代码中确实抛出了Boom错误,我相信这就是问题所在。谢谢