Получение webhook в экспресс из локального приложения - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть приложение (безголовая CMS), работающее локально. Он имеет возможность отправить веб-крючок в другое приложение. Я пытался интерпретировать этот webhook через экспресс с использованием сообщений. Я не смог даже заставить его зарегистрировать запрос, поступающий из приложения. Я проверил этот маршрут с помощью почтальона и обнаружил, что он работает, когда я отправляю на него сообщение.

router.post('/', (req, res) => {
    console.log("Recieved");
    console.log(req.body);
    res.status(200).send('ok')
});

Таким образом, когда я отправляю сообщение на: http://localhost:3000/recall через почтальона. Я получаю следующий заголовок:

Access-Control-Allow-Credentials →true
Access-Control-Allow-Headers →X-Requested-With,content-type
Access-Control-Allow-Methods →GET, POST, OPTIONS, PUT, PATCH, DELETE
Access-Control-Allow-Origin →http://localhost:3000
Connection →keep-alive
Content-Length →2
Content-Type →text/html; charset=utf-8
Date →Mon, 03 Sep 2018 21:23:22 GMT
ETag →W/"2-eoX0dku9ba8cNUXvu/DyeabcC+s"
X-Powered-By →Express

С корпусом:

ok

Мой скрипт также печатает текст сообщения.

Я могу проверить, работает ли webhook, протестировав его с помощью bin запроса. Я получаю обратно следующее:

FORM/POST PARAMETERS
None

HEADERS
Cloudfront-Forwarded-Proto: http
Cloudfront-Is-Mobile-Viewer: false
Cloudfront-Is-Desktop-Viewer: true
Connect-Time: 1
Via: 1.1 3566cbcd49f71967b52a565888e4d272.cloudfront.net (CloudFront), 1.1 vegur
Content-Length: 387
Connection: close
Accept: */*
Content-Type: application/json
Cloudfront-Viewer-Country: US
X-Amz-Cf-Id: dRe5CvkLFJZJNcpZbhmeEHo0ar_taj6guvN8utwkyVXM7ZMJc5BZTw==
Cloudfront-Is-Smarttv-Viewer: false
X-Request-Id: 4b6d2cdc-5c45-495b-b358-2e808e1bfeb4
Cloudfront-Is-Tablet-Viewer: false
Total-Route-Time: 0
Host: requestbin.fullcontact.com

BODY
{"event":"singleton.remove","hook":"Save After Sington","backend":1,"args":[{"name":"Wonder","label":"Wonder","_id":"Wonder5b8cef36a0097","fields":[{"name":"Best","label":"","type":"text","default":"","info":"","group":"","localize":false,"options":[],"width":"1-1","lst":true,"acl":[]}],"template":"","data":null,"_created":1535962934,"_modified":1535962934,"description":"","acl":[]}]}

Я попытался включить запросы между источниками. Как я мог решить эту проблему? Я думаю, что это как-то связано с тем, что этот запрос начинается и заканчивается локально.

1 Ответ

0 голосов
/ 05 сентября 2018

Чтобы приложение использовало веб-хуки, оно должно иметь общедоступный URL-адрес. По сути, остальной мир (интернет) не знает, что ваши localhost:3000 конечные точки существуют.

Самый простой способ исправить это - использовать легкий инструмент, такой как ngrok , чтобы показать ваш локальный сервер; в свою очередь, позволяя другим приложениям общаться с вашим.

Вам нужно будет определить конкретный маршрут обратного вызова, который вы хотите использовать для POST-запроса webhook. Примеры ниже.

  1. Запустите скрипт вашего узла
  2. Включи нгрок
  3. отправлять POST-запросы webhook на конечную точку, используя адрес https NGROK Ngrok example

Теперь вместо отправки вашего веб-крюка на localhost:8000/MyWebhookConsumingEndpoint
Вы отправляете это
https://95e26af4.ngrok.io/MyWebhookConsumingEndpoint

...