Мне нужно получить доступ к необработанному телу запроса webhook от Stripe в моем приложении Nest.js.
Следуя этому примеру, я добавил ниже в модуль, имеющий контроллерметод, которому требуется необработанное тело.
function addRawBody(req, res, next) {
req.setEncoding('utf8');
let data = '';
req.on('data', (chunk) => {
data += chunk;
});
req.on('end', () => {
req.rawBody = data;
next();
});
}
export class SubscriptionModule {
configure(consumer: MiddlewareConsumer) {
consumer
.apply(addRawBody)
.forRoutes('subscriptions/stripe');
}
}
В контроллере я использую @Req() req
, а затем req.rawBody
, чтобы получить необработанное тело.Мне нужно сырое тело, потому что constructEvent из API Stripe использует его для проверки запроса.
Проблема в том, что запрос застрял.Кажется, что требование не вызывается ни для данных, ни для конечного события.Так что next()
не вызывается в промежуточном программном обеспечении.
Я также пытался использовать raw-body
как здесь , но я получил почти такой же результат.В этом случае req.readable всегда ложно, поэтому я тоже застрял там.
Полагаю, это проблема с Nest.js, но я не уверен ...