比方说,我的应用的切入点是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});
。我想知道与此是否有任何明显的问题。
答案 0 :(得分:1)
让我的评论成为答案,因为这是您的解决方案。
您没有将服务器传递给WebSocket构造函数。 app
是一个请求处理程序。它不是服务器。 app.listen()
返回一个新创建的服务器对象。
从此更改您的代码:
app.listen(PORT, () => {
console.log('started app');
}
const socket = new WebSocket.Server({server: app});
对此:
const server = app.listen(PORT, () => {
console.log('started app');
}
const socket = new WebSocket.Server({server: server});
请参见app.listen()
here的代码。
app.listen = function listen() {
var server = http.createServer(this);
return server.listen.apply(server, arguments);
};
请参阅app.listen()
here的文档。
app.listen()方法返回http.Server对象,并且(对于HTTP)是用于以下目的的便捷方法: