Express aws sns确认订阅请求处理问题

Express aws sns确认订阅请求处理问题,express,amazon-sns,Express,Amazon Sns,我正在尝试为s3中的一个bucket实现aws sns服务,并遵循本文档 根据这一点,在确认订阅的请求中将有一个订阅url,它将到达我们提供的url,但我在请求中收到空的正文。 我试图记录尸体,但给了我一个空物体。并尝试使用bodyparser,但结果相同 这是我正在实施的路线 router.post("/s3FileCallback", function (req, res) { debugger; var bodyParser = require('body-par

我正在尝试为s3中的一个bucket实现aws sns服务,并遵循本文档 根据这一点,在确认订阅的请求中将有一个订阅url,它将到达我们提供的url,但我在请求中收到空的正文。 我试图记录尸体,但给了我一个空物体。并尝试使用bodyparser,但结果相同

这是我正在实施的路线

 router.post("/s3FileCallback", function (req, res) {
      debugger;
      var bodyParser = require('body-parser');
      var app = express();
      app.use(bodyParser.urlencoded({ extended: false }));
      app.use(bodyParser.json())
      if (req.get("x-amz-sns-message-type") == "SubscriptionConfirmation") {
        console.log("arn" + req.get("x-amz-sns-topic-arn"));
        const subscribeUrl = req.body.SubscribeURL;
        console.log("subscribeUrl" + subscribeUrl);
})

有什么东西我遗漏了吗。有人能给我指一下正确的方向吗。

我找到了我丢失的东西

router.post('/s3FileCallback',函数(req,res){
调试器;
如果(请求get('x-amz-sns-message-type')=='SubscriptionConfirmation'){
控制台日志('arn'+req.get('x-amz-sns-topic-arn');
const subscribeUrl=req.body.subscribeUrl;
log('subscribeUrl'+subscribeUrl);
}
});
我使用body解析器作为中间件, 亚马逊在帖子请求中以text\plain的形式发送内容类型感谢这个论坛直到我访问这个论坛才意识到类型

因此,在使用bodyparser之前,尝试了一种变通方法来更改标题

app.use(函数(请求、恢复、下一步){
if(请求获取('x-amz-sns-message-type')){
请求头['content-type']='application/json';
}
next();
});
use(bodyParser.json({limit:'50mb'}));
use(bodyParser.urlencoded({limit:'50mb',extended:false}));

因此,现在req被解析为json。

如果您使用的是php,这应该可以工作

$res = file_get_contents('php://input');
file_put_contents('response.txt', $res. "\n", FILE_APPEND);

如果我的问题没有意义或者我没有提供细节,请告诉我。救生员。我不明白为什么他们从2011年就没有解决这个问题。我也有同样的问题。你的回答非常有用。谢谢这需要更多的投票。任何使用Node和Express试图读取传入请求的人都会遇到此问题。它是2020年,但仍然没有修复:(被破坏了3个小时)谢谢,非常感谢。这是AWS文档中丢失的信息。