繁体   English   中英

为什么我无法从其他文件访问 express 服务器?

[英]Why am I not able to access the express server from a different file?

我已经如下设置了一个快速服务器(在server.js内部):

const app = express();
.........
.....
const PORT = process.env.PORT || 5000;
const server = app.listen(PORT, () =>
  console.log(`Server started on port ${PORT}`)
);
module.exports = server;

在另一个文件socket.js内部:

const server = require("./server");
const socketio = require("socket.io");
const io = socketio(server);
io.on("connection", function (socket) {
  console.log("A user just joined!");

  socket.on("disconnect", () => {
    console.log("A socket just left!");
  });
});

出于某种原因,在尝试连接到客户端上的 socketio 时,我的控制台出现错误:

GET http://localhost:3000/socket.io/?EIO=3&transport=polling&t=N8-d7Q4 404 (Not Found)

如果我在单个文件中执行所有内容(不导出服务器),则不会发生错误:

const PORT = process.env.PORT || 5000;
const server = app.listen(PORT, () =>
  console.log(`Server started on port ${PORT}`)
);
const socketio = require("socket.io");
const io = socketio(server);
io.on("connection", function (socket) {
  console.log("A user just joined!");

  socket.on("disconnect", () => {
    console.log("A socket just left!");
  });
});

我不明白出了什么问题。 module.exports 是否不适用于快速服务器,或者这是 socketio 问题?

看来您根本没有加载socket.js 当您只有一个文件时,您只需执行node app.js即可。 但是,如果你用你的两个文件做node app.js ,那么根本就没有任何东西可以加载socket.js 事实上,按照您布置这两个文件的方式,您必须这样做:

node socket.js

初始化事物。 然后, socket.js执行require('./app.js')来加载 app.js。

我想知道是否根本不可能 module.exports = server

是的,您可以自由地导出服务器并且正在导出它。


另一种做事的方法是仍然让app.js作为您加载以启动应用程序的主文件,然后从那里加载socket.js并将其传递给server object 以便它可以使用它。

// app.js

const server = const server = app.listen(...);

// load socket.js and pass it our server
require('./socket.js')(server);

然后在 socket.js 中:

// socket.js

const socketio = require("socket.io");

module.exports = function(server) {
     const io = socketio(server);
     // rest of your module code here
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM