真的很难使这个工作。我在Contentful中有一个webhook定义设置。当我在Contentful中发布条目时,它将向Webhooks.example.com发送HTTP POST请求。

在那个子域中,我有一个运行NodeJS的服务器来接受请求。我查看了Contentful API docs,它说请求正文应包含新发布的条目。

我已经尝试了两种接收请求的方法,但是这两种方法都不给我请求体任何东西。首先,我尝试了contentful-webhook-server NPM模块:

var webhooks = require("contentful-webhook-server")({
  path: "/",
  username: "xxxxxx",
  password: "xxxxxx"
});

webhooks.on("ContentManagement.Entry.publish", function(req){
  console.log("An entry was published");
  console.log(req.body);
});

webhooks.listen(3025, function(){
  console.log("Contentful webhook server running on port " + 3025);
});

在这里,请求通过,我收到消息An entry was published,但req.body未定义。如果我改为使用console.log(req),则可以看到完整的请求对象,其中不包括主体。

因此,我然后尝试运行基本的Express服务器来接受所有POST请求:
var express = require("express"),
    bodyParser = require("body-parser"),
    methodOverride = require("method-override");

var app = express();
app.use(bodyParser.json({limit: "50mb"}));
app.use(bodyParser.urlencoded({extended:true}));
app.use(methodOverride("X-HTTP-Method-Override"));

app.post("/", function(req, res){
  console.log("Incoming request");
  console.log(req.body);
});

再一次,我得到了Incoming request消息,但req.body为空。我知道此方法是错误的,因为我没有使用过Webhook用户名/密码。

如何正确接收传入的Webhook请求并获取正文内容?

最佳答案

contentful-webhook-server不会解析请求,因此可以解释为什么它没有在回调中将主体传递给您。

您的服务器似乎是正确的,但似乎内容具有type-is库无法识别的自定义json类型。

内容类型看起来像'application/vnd.contentful.management.v1 + json'

如果您让body-parser接受此自定义内容类型,则服务器可能会工作。例如 :

app.use(bodyParser.json({type: 'application/*'}));

如果可行,则可以更具体地说明接受的类型。

作为记录 :
typeis.is('application/vnd.contentful.management.v1+json', ['json'])
=> false

关于javascript - 具有内容和 Node 的Webhooks,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30440782/

10-12 16:54