Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Catch webhook node.js_Javascript_Node.js_Put_Webhooks - Fatal编程技术网

Javascript Catch webhook node.js

Javascript Catch webhook node.js,javascript,node.js,put,webhooks,Javascript,Node.js,Put,Webhooks,我试图捕获node.js中的Aftership API发出的PUT/webhook请求。每次需要发出推送通知时都会发出一个PUT请求,我正在使用Parse发送通知,但我需要来自webhook的一些数据 webhook的标题看起来像内容类型:application/json,包含以下数据: ts-事件发生的UTC unix时间戳 事件-事件的名称(对于跟踪更新,该值将为 “跟踪更新”) msg-事件发生的消息的详细信息,位于 以下格式 如何在node或js中的自定义字段字典中获取跟踪号、slug和

我试图捕获node.js中的Aftership API发出的PUT/webhook请求。每次需要发出推送通知时都会发出一个PUT请求,我正在使用Parse发送通知,但我需要来自webhook的一些数据

webhook的标题看起来像
内容类型:application/json
,包含以下数据:

ts-事件发生的UTC unix时间戳

事件-事件的名称(对于跟踪更新,该值将为 “跟踪更新”)

msg-事件发生的消息的详细信息,位于 以下格式

如何在node或js中的自定义字段字典中获取跟踪号、slug和
标记的值

{
    "event": "tracking_update",
    "msg": {
        "id": "53aa94fc55ece21582000004",
        "tracking_number": "906587618687",
        "title": "906587618687",
        "origin_country_iso3": null,
        "destination_country_iso3": null,
        "shipment_package_count": 0,
        "active": false,
        "order_id": null,
        "order_id_path": null,
        "customer_name": null,
        "source": "web",
        "emails": [],
        "custom_fields": {},
        "tag": "Delivered",
        "tracked_count": 1,
        "expected_delivery": null,
        "signed_by": "D Johnson",
        "shipment_type": null,
        "tracking_account_number": null,
        "tracking_postal_code": "DA15BU",
        "tracking_ship_date": null,
        "created_at": "2014-06-25T09:23:08+00:00",
        "updated_at": "2014-06-25T09:23:08+00:00",
        "slug": "dx",
        "unique_token": "xk7LesjIgg",
        "checkpoints": [{
            "country_name": null,
            "country_iso3": null,
            "state": null,
            "city": null,
            "zip": null,
            "message": "Signed For by: D Johnson",
            "coordinates": [],
            "tag": "Delivered",
            "created_at": "2014-06-25T09:23:11+00:00",
            "checkpoint_time": "2014-05-02T16:24:38",
            "slug": "dx"
        }]
    },
    "ts": 1403688191
}

可以使用
Express
framework完成,例如:

var express = require('express'),
    bodyParser = require('body-parser'),
    app = express(),
    port = 3000;

app.use(bodyParser.json());

app.post('/', function (req, res) {
    var body = req.body;
    var trackingNumber = body.msg.tracking_number;
    var slug = body.msg.slug;
    var token = body.msg.unique_token;

    console.log(trackingNumber, slug, token);

    res.json({
        message: 'ok got it!'
    });
});

var server = app.listen(port, function () {

    var host = server.address().address
    var port = server.address().port

    console.log('Example app listening at http://%s:%s', host, port)

});
这是最简单的方法,只需克隆它并执行
npm安装
,然后
npm启动
。服务器将在端口
3000
:D上运行


注意:我在Aftership Webhook的文档中看到,它说他们将请求
POST
HTTP方法,而不是
PUT
,所以我创建了一个
POST
请求的示例。如果您想让它捕获请求,只需将其替换为
put

您可以通过

app.put('/someRouteToCatchWebHook', function(request, response) {
  //webhook parsing goes here
});
(我确信您在代码中使用了expressjs——有关详细信息,请参阅)


如果webhook数据在请求体中,您可以使用模块对其进行解析。

为了检查webhook数据,我建议将每个请求存储在数据库中,然后查询数据库。由于每个请求都是不同的,最简单的方法是在sails.js(Node.js框架和易于使用的ORM)中创建API

使用最后一个命令,sails生成了用于存储webhook数据的控制器和模型

我建议为跑步应用程序安装pm2。你可以用它运行

pm2 start app.js
接下来,您应该在Aftership中为以下url配置webhook:

您的服务器IP:端口/记录/创建

您可以通过以下url检查数据:

您的\u服务器\u IP:端口/记录/查找

如果要解析数据,可以在RecordsController.js中完成,例如:

Parsing: function(req, res) {

    Records.find({}).exec(function(err, results) {

        var output = [];

        while (results.length) {
            var result = results.pop();
            //custom parsing goes here
            //example:
            output.push({
                tracking_number: result.msg.tracking_number,
                slug: result.msg.slug,
                unique_token: result.msg.unique_token
            });
        }
        return res.json(output);
    });


},
您可以通过以下url调用此方法: 您的\u服务器\u IP:端口/记录/解析

我已经在Codeanywhere中创建了一个用于演示的项目

webhook端点是:

对于检查数据,只需替换/创建url的一部分即可/find

吉特回购协议如下:


您可以在服务器上克隆项目并运行它(或使用我的服务器进行测试)

这是PUT请求正文中发送的JSON吗?@akonsu是的,我相信是的。不,这不对,每个请求都不同。提供的JSON只是一个即将出现的示例。因此,JSON是通过某个端点返回的主体,您会问如何获取它?端点是您已经可以获得的吗?如果是,那么您会问如何命中该端点并操纵结果?您使用什么框架?跟快车打招呼?因为答案取决于如何创建请求。如果您不介意的话,请告诉我您是如何创建该请求的,这样我就能了解
回调
结果的去向。哦,我知道了,所以您想创建一个
webhook
来捕获请求它的json。这可以通过Express完成,如果您愿意,请稍等片刻,我将尝试给出一个示例以及GitHub代码,这样您就可以轻松地在开发服务器中安装
npm
。您确定它到达端口
3000
?尝试将端口更改为
80
,这样它将侦听默认的HTTP端口。我对JS/HTML几乎没有经验。我已起诉npm安装express。但是现在我如何将express框架包含到我的HTML文件中?@Nick你不能在HTML文件中包含express。NodeJS是一个运行javascript的平台,express是NodeJS服务网站(HTML)的框架。看了你在Andi的答案中链接的代码后,我甚至不确定你还想做什么。
Parsing: function(req, res) {

    Records.find({}).exec(function(err, results) {

        var output = [];

        while (results.length) {
            var result = results.pop();
            //custom parsing goes here
            //example:
            output.push({
                tracking_number: result.msg.tracking_number,
                slug: result.msg.slug,
                unique_token: result.msg.unique_token
            });
        }
        return res.json(output);
    });


},