【问题标题】:Express router + WebSocketServer - sending message on POSTExpress 路由器 + WebSocketServer - 在 POST 上发送消息
【发布时间】:2015-09-22 13:40:07
【问题描述】:

这是我到目前为止所得到的,我正在尝试找到一个解决方案,以便:

  • 连接始终保持活动状态,因此我可以处理状态更新
  • 我可以使用来自 POST 请求的数据向客户端发送 websocket 消息

wsapi here

 router.post('/', function (req, res) {
// Need to send ws.send() with post data
})


wss.on('connection', function(ws) {
  ws.on('message', function(message) {
    console.log('r : %s', message);
  });
  // ws is only defined under this callback as an object of type ws
});

【问题讨论】:

    标签: node.js express websocket


    【解决方案1】:

    你可以像这样使用事件:

    //Create an event
    var event = require('events').EventEmitter();
    
    router.post('/', function (req, res) {
       // fire an event
       event.emit('homePage')
    })
    
    wss.on('connection', function(ws) {
        ws.on('message', function(message) {
         console.log('r : %s', message);
        });
    
        // listen the event
        event.on('homePage', function(){
            ws.emit('someEvent');
        });
    });
    

    【讨论】:

    • event 在我尝试此操作时未定义
    【解决方案2】:

    我遇到了一个错误:

    TypeError: 无法读取未定义的属性 'emit'

    我想我可能会误解或遗漏一些对其他人来说显而易见的东西。请求发出调用时出现错误:

    router.post('/', function (req, res) {
       // fire an event
       event.emit('homePage') <----------- HERE
    })
    

    我在开头添加:

    var event = require('events').EventEmitter();
    

    更新! 我解决了它通过这个 2 更改需要事件的行:

    var events = require('events');
    var eventEmitter = new events.EventEmitter();
    

    之后它就可以工作了。

    【讨论】:

    • 我解决了在开始时添加这个... var events = require('events'); var eventEmitter = new events.EventEmitter();
    猜你喜欢
    • 1970-01-01
    • 2022-01-19
    • 2023-03-15
    • 2016-08-08
    • 1970-01-01
    • 2018-07-01
    • 2017-05-19
    • 1970-01-01
    • 2021-03-11
    相关资源
    最近更新 更多