节点从“/webhook”另一个端点/代码块的某个时间后从服务器发送数据到客户端(已经加载了“/”索引页)

Posted

技术标签:

【中文标题】节点从“/webhook”另一个端点/代码块的某个时间后从服务器发送数据到客户端(已经加载了“/”索引页)【英文标题】:Node Send data from server to client (already loaded '/' index page) after sometime from '/webhook' another end point/code block 【发布时间】:2017-09-14 18:49:18 【问题描述】:

我的意图是在用户在“/”页面上执行第三方 API(例如 PayPal)之后;从该第三方 API 系统接收到“/webhook/check”端点上的数据后,将数据中继到用户仍在等待响应的“/”索引页面。

下面是我的两个控制器。

index.js 控制器

router.get('/', function (req, res) 
    res.render('index', model);
);

webhooks.js 控制器

router.post('/check', function (req, res) 
    console.log(req.body);

    // WHEN A WEBHOOK NOTIFICATION IS RECEIVED HERE, DO SOMETHING
    // TO SEND DATA TO ALREADY LOADED `/' INDEX PAGE RENDERED BY
    // CONTROLLER ABOVE

    res.end();
);

更新: 我用过socket.io

index.js

var io = require('socket.io').listen(server);

io.on('connection', function(socket)
    console.log('Socket, on connection, now sending/receiving on `webhooks`' );
    // socket.join("test");
    socket.on('webhooks', function(data)
        console.log(data);
    );


);

app.socketsio  = io;

webhooks.js

var socketsio = require('../index').socketsio;


module.exports = function (router) 

    var model = new WebhooksModel();

    router.post('/check', function (req, res) 

        // console.log(req.body);
        socketsio.emit('webhooks', req.body);
        res.end();
    );

;

【问题讨论】:

【参考方案1】:

您可以使用 EventEmitter:

const EventEmitter = require('events');
const myEmitter = new EventEmitter();

router.get('/', function (req, res) 
    res.render('index', model);

    myEmitter.on('checkNotification', function(data) 
        // Process data
    )
);

router.post('/check', function (req, res) 
    console.log(req.body);

    myEmitter.emit('checkNotification', 'Your data')

    res.end();
);

【讨论】:

谢谢。让我试试这个。我不确定如何在客户端触发事件。我会回去的。我一直在反复使用 sockets.io 和 html5 Server-Sent Events。可能使用它来 ping 客户端并获取数据,而不是不断轮询。 SSE 只在一个方向上工作server => clients,所以,当你不想设置套接字的服务器并且你只需要一个方向的通信通道时,这很好,Socket.io 是双向的,它当客户端和服务器需要实时交换大量消息和事件时,可以更好地工作。 我使用了上面更新部分的解决方案。 SSE 对我不起作用。

以上是关于节点从“/webhook”另一个端点/代码块的某个时间后从服务器发送数据到客户端(已经加载了“/”索引页)的主要内容,如果未能解决你的问题,请参考以下文章

从画布正确获取信息并通过带有 node-fetch 的 webhook 将信息发送到 discord 时出现问题

如何验证 PayPal Webhook 签名?

如何让我的 java 应用程序作为 webhook 的端点

如何通过传出 webhook 接收交互?

SendGrid 传入邮件 webhook - 如何保护我的端点

在 webhook 请求 PHP 上接收空字符串