[英]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.