【发布时间】:2019-06-18 04:16:19
【问题描述】:
我需要在我的 Nest.js 应用程序中访问来自 Stripe 的 webhook 请求的原始正文。
在this 示例之后,我将以下内容添加到具有需要原始主体的控制器方法的模块中。
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 就像here 一样,但我得到了几乎相同的结果。在那种情况下, req.readable 总是错误的,所以我也被困在那里。
我猜这是 Nest.js 的问题,但我不确定...
【问题讨论】:
-
在
bootsrap方法中创建NestApplication时,您可能没有禁用Nest 的默认bodyParser
标签: node.js typescript express stripe-payments nestjs