javascript - 带有 Contentful 和 Node 的 Webhook

标签 javascript node.js express webhooks contentful

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

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

我尝试了 2 种接收请求的方法,但都没有为我提供任何请求正文。首先我尝试了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);
});

这里请求通过,我收到消息 已发布条目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 不解析 req,这可以解释为什么它不会在回调中将正文传递给您。

您的服务器似乎是正确的,但似乎 contentful 具有 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 - 带有 Contentful 和 Node 的 Webhook,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30440782/

相关文章:

node.js - Joi有 "not"的概念吗?

javascript - ExpressJS 和客户端中的 i18next 模块

javascript - Node readline 接口(interface)以乘法方式重复每个字符

javascript - 冲突的 jquery.min.js

javascript - 使用 JavaScript 构建 native 应用程序的最佳方式?

node.js - 每个 axios 请求在 React-Redux 应用程序中都会触发两次?

node.js - 如何在 docker 中使用 certbot 正确安装 ssl 证书?

javascript - 带 react 导航的 DrawerNavigation 标题

node.js - Passport.js - 是否可以将参数传递到路由器验证功能中?

node.js - 在http请求库中发送参数