Webhooks与Contentful和node

Coo*_*oop 9 javascript webhooks node.js express contentful

真的很难让这个工作.我在Contentful中设置了webhook定义.当我在Contentful中发布条目时,它会向webhooks.example.com发送HTTP POST请求.

在该子域我运行NodeJS服务器以接受请求.我查看了Contentful API文档,它说请求正文应该包含新发布的条目.

我已经尝试了两种接收请求的方法,这两种方法都没有给我任何请求体.首先,我尝试了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);
});
Run Code Online (Sandbox Code Playgroud)

这里请求来了,我得到了消息,An entry was publishedreq.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);
});
Run Code Online (Sandbox Code Playgroud)

再说一遍,我得到的Incoming request消息req.body却是空的.我知道这种方法是错误的,因为我没有使用我的webhook用户名/密码.

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

Jer*_*NER 12

contentful-webhook-server不解析REQ,这样可以解释为什么它不会在回调提供身体给你.

您的服务器似乎是正确的,但似乎内容有一个type-is库不能识别的自定义json类型.

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

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

app.use(bodyParser.json({type: 'application/*'}));
Run Code Online (Sandbox Code Playgroud)

如果这样可行,您可以对接受的类型更具体.

作为记录 :

typeis.is('application/vnd.contentful.management.v1+json', ['json'])
=> false
Run Code Online (Sandbox Code Playgroud)