【发布时间】:2018-08-23 21:45:05
【问题描述】:
假设我的应用程序的入口点是app.js
我想在应用程序运行时创建一个套接字连接,然后将其导出到整个应用程序中的其他文件。
这里有一些示例代码
const express = require('express');
const WebSocket = require('ws');
const app = express();
app.use(allTheMiddleWares);
app.listen(PORT, () => {
console.log('started app');
}
const socket = new WebSocket.Server({server: app});
module.exports = socket;
然后,当我尝试从app.js 访问导出时,我总是得到一个空对象。
我也尝试过导出函数:
module.exports = {
test: () => console.log("why don't I work")
}
但是,这也返回一个空对象。
提前感谢您的帮助。
作为全局访问套接字的临时解决方法,我设置了process.WebSocket = new WebSocket.Server({server: app});。我想知道这是否有任何明显的问题。
【问题讨论】:
-
附言。上面的代码不是真的。只是一个插图。
-
你能用
export default socket;代替module.exports = socket;吗? -
当你在导入时得到一个空对象,通常是因为循环模块依赖,A 导入 B,B 导入 A。你对代码了解不够,我们无法查看这就是问题所在。
-
另外,
new WebSocket.Server({server: app});看起来不对,因为app不是服务器(它是一个 Express 请求处理函数)。app.listen()返回创建的服务器对象。 -
如果不查看您要导出的文件和要导入的文件这两个文件,我们将无能为力。
module.exports = socket;没有任何问题,所以这里肯定有其他事情发生。而且,使用global是一个坏主意,也是一个不好的开始趋势。以正确的方式解决问题。