[英]I'm attempting to put my logic in a separate file using module.exports and require, however, I can't seem to figure it out
Recently I picked up Node.js + Express.js in order to pair them with Socket.io and make a real time chat application.最近我拿起了 Node.js + Express.js 以便将它们与 Socket.io 配对并制作一个实时聊天应用程序。 The problem is that since I'm relatively inexperienced with Node.js and Express.js, I'm having some trouble figuring out where to put my logic and how to separate it in different files.问题是,由于我对 Node.js 和 Express.js 相对缺乏经验,因此在弄清楚将逻辑放在何处以及如何将其分隔到不同文件中时遇到了一些麻烦。 Right now, the logic that creates my Socket.io namespaces is in the www
file and I'm trying to figure out where to place it.现在,创建我的 Socket.io 命名空间的逻辑在www
文件中,我正试图找出将它放在哪里。 Right now it looks like this:现在它看起来像这样:
www
File: www
文件:
var app = require('../app');
var http = require('http');
var server = http.createServer(app);
let io = require('socket.io')(server);
servers.forEach((server) => {
console.log(server.name)
io.of(server.endpoint).on('connection',(socket) => {
socket.on('messageToServer', (message) => {
let roomName = Object.keys(socket.rooms)[1]
let room = server.room.find((room) => {
return room.name == roomName
})
room.history.push(message)
io.of(server.endpoint).to(roomName).emit('messageToClient', message)
})
socket.on('joinRoom', (roomToJoin) => {
let roomToLeave = Object.keys(socket.rooms)[1]
socket.leave(roomToLeave)
socket.join(roomToJoin)
let room = server.room.find((room) => {
return room.name == roomToJoin
})
socket.emit('chatHistory', room.history)
})
})
});
What I tried is the following - I created a socket.js
file and put it in a folder called utility
, moved the code from www
to the socket.js
file and tried exporting the server from my www file to my socket.js file so that Socket.io can access it:我尝试的是以下内容 - 我创建了一个socket.js
文件并将其放在一个名为utility
的文件夹中,将代码从www
移动到socket.js
文件并尝试将服务器从我的 www 文件导出到我的 socket.js 文件所以Socket.io 可以访问它:
socket.js
File: socket.js
文件:
let server = require('../bin/www').server
let io = require('socket.io')(server);
function createSocketServers() {
servers.forEach((server) => {
console.log(server.name)
io.of(server.endpoint).on('connection',(socket) => {
socket.on('messageToServer', (message) => {
let roomName = Object.keys(socket.rooms)[1]
let room = server.room.find((room) => {
return room.name == roomName
})
room.history.push(message)
io.of(server.endpoint).to(roomName).emit('messageToClient', message)
})
socket.on('joinRoom', (roomToJoin) => {
let roomToLeave = Object.keys(socket.rooms)[1]
socket.leave(roomToLeave)
socket.join(roomToJoin)
let room = server.room.find((room) => {
return room.name == roomToJoin
})
socket.emit('chatHistory', room.history)
})
})
});
}
module.exports = createSocketServers
www
File: www
文件:
var app = require('../app');
var http = require('http');
var server = http.createServer(app);
module.exports = server
require('../utility/socket').createSocketServers
As soon as I did that, my code stopped working, so I can only assume I haven't done it correctly, hence why I'm here asking for help.一旦我这样做了,我的代码就停止了工作,所以我只能假设我没有正确完成它,因此我在这里寻求帮助。 Thanks!谢谢!
Everything looks fine except this line除了这条线,一切看起来都很好
require('../utility/socket').createSocketServers
When you do, module.exports = createSocketServers
in socket.js
file, you actually exporting the constructor.当你这样做时, socket.js
文件中的module.exports = createSocketServers
,你实际上是在导出构造函数。
If you run what you require, it should work;如果你运行你需要的东西,它应该可以工作;
require('../utility/socket')()
If you want to keep it like you do now, you have to export an object from socket.js
file;如果你想像现在一样保留它,你必须从socket.js
文件中导出一个 object;
module.exports = { createSocketServers }
After exporting your module like above, you have to run it like below;像上面那样导出模块后,你必须像下面那样运行它;
require('../utility/socket').createSocketServers()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.