gpt4 book ai didi

javascript - Node.js 将对象从 server.js 传递到外部模块?

转载 作者:搜寻专家 更新时间:2023-11-01 00:30:58 25 4
gpt4 key购买 nike

我在 server.js 文件的顶部有这些声明

var express = require('express'),
app = express(),
server = require('http').createServer(app),
mongoose = require('mongoose'),
bodyParser = require('body-parser'),
apiRouter = require('./app/routes/api.js'),
socketEvents = require('./app/modules/socketEvents.js')(server);

所以我试图将“服务器”变量传递给我的 socketEvents 模块,上面的方法似乎不起作用。它在我的 Node.JS 控制台中抛出一个错误,即“服务器”未在 socketEvents.js 的第 1 行定义,我将在下面发布。

socketEvents.js

var io = require('socket.io')(server),
matchMakingQueue = [];

io.on('connection', function(socket) {

socket.on('joinMatchMaking', function(data) {
//Every time a player joins the matchmaking queue, check if a game can be created.
matchMakingQueue.push(data);
var matchedPlayers = [];
for (i = 0; i < matchMakingQueue.length; i++) {
switch (data.gameType) {
case '1v1':
matchedPlayers.push(matchMakingQueue[i].username);
if (matchedPlayers.length == 2) {
socket.emit('matchFound', {players: matchedPlayers});
}
console.log('user joined 1v1 queue');
case '2v2':
matchedPlayers.push(matchMakingQueue[i].username);
if (matchedPlayers.length == 4) {
socket.emit('matchFound', {players: matchedPlayers});
}
console.log('user joined 2v2 queue');
}
}
console.log(data.username + ' joined the ' + data.gameType + ' matchmaking queue');
console.log('users in queue: ' + matchMakingQueue.length);
});

socket.on('leaveMatchMaking', function(username) {
matchMakingQueue.splice(matchMakingQueue.indexOf(username), 1);
console.log(username + ' left matchmaking queue.');
console.log('users in queue: ' + matchMakingQueue.length);
});

});

server.js

var express = require('express'),
app = express(),
server = require('http').createServer(app),
mongoose = require('mongoose'),
bodyParser = require('body-parser'),
apiRouter = require('./app/routes/api.js'),
socketEvents = require('./app/modules/socketEvents.js')(server);

//Clears Node Console.
process.stdout.write('\033c');
console.log('Server starting!');

app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json())

app.use('/api', apiRouter);
app.use(express.static('public'));

app.use('*', function(req, res, next) {
//All requests return single page angular application.
res.sendFile(__dirname + '/public/index.html');
});

mongoose.connect('localhost', 'triviaattack', function(err) {
if (err) {
console.log('An error occured when connecting to the MongoDB Database');
throw err;
}
});

server.listen(1337);

最佳答案

在 socketEvents.js 中

function sockets(server) {
var io = require('socket.io')(server),
matchMakingQueue = [];

// etc...
}

module.exports = sockets;

在 server.js 中:

var sockets = require('./socketEvents'),
express = require('express'),
app = express(),
server = require('http').createServer(app),
...
...

sockets(server);

基本上,您从要使用它们的地方导出函数,然后在 server.js 中需要这些文件。

示例项目:

服务器.js:

var sockets = require('./socketEvents')
server = require('http');

sockets(server);

套接字事件.js:

function sockets(server) {
console.log("Hello");
console.log(server);
}

module.exports = sockets;

两个文件都在同一个文件夹中。运行: Node 服务器

结果: enter image description here

关于javascript - Node.js 将对象从 server.js 传递到外部模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34301795/

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