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

Man*_*noj 2 amazon-sns express

我正在尝试为s3中的存储桶实施aws sns服务,并且我正在按照此文档https://docs.aws.amazon.com/sns/latest/dg/SendMessageToHttp.html进行操作, 根据该文档中将包含订阅网址确认订阅的请求将进入我们提供的网址,但我在请求中收到空白内容。我试图记录尸体,但给了我一个空的物体。并尝试使用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);
})
Run Code Online (Sandbox Code Playgroud)

有什么我想念的吗?谁能指出我正确的方向。

Man*_*noj 5

我发现我所缺少的,

router.post("/s3FileCallback", function (req, res) {
      debugger;
      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);
})
Run Code Online (Sandbox Code Playgroud)

我正在使用身体解析器作为中间件,亚马逊在帖子请求中将text-plain发送为内容类型,感谢这个论坛,直到我遇到这个https://forums.aws.amazon.com/,我才意识到这种类型。 message.jspa?messageID = 261061#262098

所以尝试了解决方法,在使用bodyparser之前更改标题

app.use(function (req, res, next) {
        if (req.get('x-amz-sns-message-type')) {
        req.headers['content-type'] = 'application/json';
        }
        next();
      });
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb',
    extended: false
}));
Run Code Online (Sandbox Code Playgroud)

所以现在req被解析为json。

  • 救生员。我不明白为什么他们自 2011 年以来没有解决这个问题。 (4认同)
  • 这需要更多的赞成票。任何使用 Node 和 Express 尝试读取传入请求的人都会遇到这种情况。 (2认同)