在Node中将`express()`和`ws()`对象导出到其他文件时出现问题?

时间:2018-08-23 21:45:05

标签: node.js express websocket

比方说,我的应用的切入点是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});。我想知道与此是否有任何明显的问题。

1 个答案:

答案 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)是用于以下目的的便捷方法: