Действительно изо всех сил пытаюсь заставить эту работу работать. У меня есть настройка определения webhook в Contentful. Когда я публикую запись в Contentful, он отправляет запрос HTTP POST на webhooks.example.com.Веб-камеры с содержанием и узлом
В этом субдомене у меня есть сервер NodeJS, работающий для принятия запроса. Я просмотрел Contentful API docs, в котором говорится, что орган запроса должен содержать недавно опубликованную запись.
Я пробовал 2 метода получения запроса, ни один из которых не дает мне ничего для тела запроса. Сначала я попробовал модуль contentful-webhook-server НПМ:
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
но пуст. Я знаю, что этот метод неверен, потому что я не использовал имя пользователя/пароль для веб-хостинга.
Как правильно получать входящие запросы веб-камеры и получать содержимое тела?
Прежде всего: Вы забыли использовать 'app.listen (#portNumber)'. Я добавил эту строку и попробовал пример 'curl' из contentful-webhook-сервера:' curl -X POST -header 'X-Contentful-Topic: ContentManagement.Entry.publish "localhost: # portNumber'. Это сработало для меня. Вы еще заметили какие-либо проблемы после добавления этой строки? – Dodekeract
@FlorianW. Да, у меня был код 'app.listen', только не в моем примере выше. Он получает входящие запросы, но запись не включена в тело, как ожидалось. Похоже, он должен соответствовать документам API для Contentful. – Coop
Вы пытались записать входящий поток на консоль, используя 'req.pipe (process.stdout);' например? Входящее сообщение имеет тип https://nodejs.org/api/http.html # http_http_incomingmessage, насколько я могу видеть из документов модуля npm .. –