我需要在我的Nest.js应用程序中访问Stripe Webhook请求的原始正文。
按照此示例,我将以下内容添加到模块中,该模块具有需要原始正文的控制器方法。
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
来获取原始请求体。我需要原始请求体,因为 Stripe API 的 constructEvent 使用它来验证请求。问题在于请求被卡住了。似乎 req.on 既没有为数据事件也没有为结束事件调用。所以,中间件中的
next()
没有被调用。我也尝试像 这里 一样使用
raw-body
,但结果几乎相同。在这种情况下,req.readable 总是为 false,所以我也被卡住了。我猜这是 Nest.js 的问题,但我不确定...
NestApplication
的bootstrap
方法中,您可能没有禁用Nest的默认bodyParser
。 - kaznovac