gpt4 book ai didi

javascript - 在模块中使用 express.js 创建 Socket.IO 服务器并从其他模块访问它

转载 作者:行者123 更新时间:2023-11-30 15:15:00 27 4
gpt4 key购买 nike

我想要一个模块,我向其传递 express使用 Socket.IO 创建服务器的应用程序。在 require 调用之后,我想返回 io 对象。

这是我所拥有的:

ioserver.js

var http = require("http");

module.exports = function (expressApp) {
var server = http.createServer(expressApp);
var io = require("socket.io")(server);
return io;
};

sample-request.js

var io = require("./ioserver");
console.log("sample request io", io);

index.js

var express = require("express");
var app = express();

var io = require("./modules/ioserver")(app);
console.log("index io", io);

var sampleRequest = require("./modules/sample-request");

问题

index.js 中,日志按预期返回了 io 对象:

index io Server {
nsps:
{ '/':
Namespace {
name: '/',
server: [Circular],
sockets: {},
...

不过,在示例模块中,日志如下所示:

sample request io function (expressApp) {
var server = http.createServer(expressApp);
var io = require("socket.io")(server);
return io;
}

问题

为什么会这样?我想要的是从 sample-request.js 访问在 index.js 中创建的 io 对象。我注意到,如果我将参数传递给示例模块中的 require,则会创建一个新服务器,并且那里的日志只是新服务器。

问题可能是因为在一个地方,我 require 路径为 ./modules/ioserver 的模块,而在另一个地方 - 使用 ./ioserver ?基于what I've read .

最佳答案

我找到了一种方法。我不知道这是否是最佳 方式,但它确实有效。如果有人有更好的解决方案,请分享。

ioserver.js

var http = require("http");
var io = null;

module.exports = function (expressApp) {
if (io === null && expressApp) {
var server = http.createServer(expressApp);
io = require("socket.io")(server);
}

return io;
};

sample-request.js

var io = require("./ioserver")();

index.js

var express = require("express");
var app = express();

var io = require("./modules/ioserver")(app);
var sampleRequest = require("./modules/sample-request");

请注意,在 sample-request.js 中,我调用require() 返回的对象:

var io = require("./ioserver")();
------------------------------^^

如果我不这样做,我得到的值与我在问题中得到的值相同。

关于javascript - 在模块中使用 express.js 创建 Socket.IO 服务器并从其他模块访问它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44602829/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com