我正在开发一个节点项目,我需要使用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
}
答案 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_injection 和What is dependency injection?