节点从“/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 时出现问题