我正在使用Hapi 17,处理同构react应用的输出,在将其转发到下游服务之前,我需要对输出(可以是json或form)进行一些检查。
我写了这个处理程序:
Server._instance.route({
method: ['POST'],
path: '/services/diary/{p*}',
handler: async (req: Hapi.Request, h: Hapi.ResponseToolkit) => {
let existingPayload = req.payload as DiaryAndUICruft;
Object.defineProperty(existingPayload, '_redirect', {
value: '/sampleUrl', // getter omitted for brevity
writable: false
});
const completeAddress = `http://${remoteAddress}:${remotePort || 1337}${req.url.path}`;
const promise = wreck.post(completeAddress, {
payload:
req.headers['content-type'].indexOf('application/json') !== -1
? existingPayload
: qs.stringify(existingPayload),
headers: req.headers
});
try {
const u = await promise;
return u.res.statusCode === 302 ? h.redirect(u.res.headers.location) : h.response(u.payload);
} catch (err) {
console.info('it did not work ', err);
return err;
}
}
});
使用json可以正常工作。我可以在另一台服务器上看到正确处理的有效负载;但如果是表单,则有效负载中有50%的部分会丢失。我怀疑我以某种方式编写了此东西,即使有效负载仍处于挂起状态,它也会尝试转发它(但是调试器似乎无法证明这一点)。 我确定我会错过房间里的经典大象,但是无论如何搜索,都找不到我不熟悉的hapi 17进行有效载荷更改的示例。