Я работаю с Hapi 17, обрабатывая выходные данные приложения изоморфного реагирования, и мне нужно выполнить некоторые проверки выходных данных (которые могут быть как json, так и формы), прежде чем пересылать их в нисходящий сервис.
Я написал этот обработчик:
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, версией, с которой я незнаком.