NodeJS Socket.io从另一个javascript文件调用

时间:2018-01-15 02:10:34

标签: javascript node.js websocket

我正在开发一个节点项目,我需要使用websockets。我在我的项目中获得了socket.io的基本实现。以下是目前server.js的代码

import app from '../app';    
import http from 'http';
import socket from 'socket.io';

    var server = http.createServer(app);
    server.listen(app.get("port"));
    server.on('error', onError);
    server.on('listening', onListening);

    const io = socket(server);
    io.on('connection', (socket) => {
      console.log(`connected ${socket.id}`);
      socket.on('disconnect', () => {
        console.log('disconnected');

      });
    });

现在,如果我需要从另一个javascript文件调用socket,我该怎么做? 这样的事情:来自a.js我想从下载功能调用emit消息。问题是我没有在socket中引用a.js对象。它是在我的server.js文件中定义的。有什么建议吗?

export const download = () => {
  //after file is downloaded, emit message using socket.io to user

}

1 个答案:

答案 0 :(得分:0)

您需要将对象注入您正在调用的函数中。是编程中的Dependency Injection principle。 您可以 a.js

export const download = (io) => { // io is the reference
    //do something with io like io.emit
}

然后在您的服务器中,您需要导入下载功能,然后在代码中传递 io

import {download} from "<src/file/of/a.ts>"
// somewhere in the code in server.js
download(io);

依赖注入原则 参考https://en.wikipedia.org/wiki/Dependency_injectionWhat is dependency injection?