Javascript 模块中的NodeJS必需模块始终未定义
我对后端代码非常陌生。现在,我尝试学习nodeJS服务器的体系结构 我认为我现在的问题很简单,但我无法解决-- server.js(主):Javascript 模块中的NodeJS必需模块始终未定义,javascript,node.js,undefined,Javascript,Node.js,Undefined,我对后端代码非常陌生。现在,我尝试学习nodeJS服务器的体系结构 我认为我现在的问题很简单,但我无法解决-- server.js(主): var io = require("socket.io"), express = require("express"), expressHbs = require('express3-handlebars'), Player = require("./models/Player").Player, Room = require("./models/Room"
var io = require("socket.io"),
express = require("express"),
expressHbs = require('express3-handlebars'),
Player = require("./models/Player").Player,
Room = require("./models/Room").Room,
Game = require("./models/Game").Game,
dataSet = require('./data/data.json');
//...
path/path/path/gameserver/models/Room.js:222
var currentPlayer = Player.getPlayer(this.players[player].id);
^
TypeError: Cannot read property 'getPlayer' of undefined
然后我有3个模块:
// importing another module
var Room = require("./Room").Room;
if (!Player.players) {
Player.players = {};
}
function Player(foo) {
this.foo = foo;
Player.players[foo] = this;
}
Player.getAllPlayersAsObject = function () {
return Player.players;
};
// ...
Player.prototype.removePlayer = function () {
if (Player.players.hasOwnProperty(this.id)) {
delete Player.players[this.id];
}
};
// ...
/**
* node export
* @type {Player}
*/
exports.Player = Player;
var Player = require("./Player").Player;
if (!Room.rooms) {
Room.rooms = {};
}
function Room(foo) {
this.foo = foo
}
Room.getAllRoomsAsObject = function () {
return Room.rooms;
};
Room.prototype.toString = function () {
return JSON.stringify(this);
};
/**
* node export
* @type {Room}
*/
exports.Room = Room;
Room.js
// importing another module
var Room = require("./Room").Room;
if (!Player.players) {
Player.players = {};
}
function Player(foo) {
this.foo = foo;
Player.players[foo] = this;
}
Player.getAllPlayersAsObject = function () {
return Player.players;
};
// ...
Player.prototype.removePlayer = function () {
if (Player.players.hasOwnProperty(this.id)) {
delete Player.players[this.id];
}
};
// ...
/**
* node export
* @type {Player}
*/
exports.Player = Player;
var Player = require("./Player").Player;
if (!Room.rooms) {
Room.rooms = {};
}
function Room(foo) {
this.foo = foo
}
Room.getAllRoomsAsObject = function () {
return Room.rooms;
};
Room.prototype.toString = function () {
return JSON.stringify(this);
};
/**
* node export
* @type {Room}
*/
exports.Room = Room;
我的主要问题是,我可以正常使用server.js中的Room、Player、Game-constructor、prototype和所有其他功能
在Player.js中,我也可以正常使用导入的房间模块
Room.js告诉我:
var io = require("socket.io"),
express = require("express"),
expressHbs = require('express3-handlebars'),
Player = require("./models/Player").Player,
Room = require("./models/Room").Room,
Game = require("./models/Game").Game,
dataSet = require('./data/data.json');
//...
path/path/path/gameserver/models/Room.js:222
var currentPlayer = Player.getPlayer(this.players[player].id);
^
TypeError: Cannot read property 'getPlayer' of undefined
我快疯了。我做错了什么?当我在文件顶部对变量“Player”执行console.log(debug)时,我总是没有定义
我在谷歌和stackoverflow上四处走动,没有找到任何解决问题的方法
谢谢,并致以最良好的祝愿
Michael模块之间存在循环依赖关系 你从要求玩家开始。它做的第一件事就是需要空间。房间需要玩家。此时,播放机尚未完成加载。节点通过返回不完整的播放器版本来防止发生无限循环。在这一点上,所有关于将要发生的事情的赌注都没有了 您需要构建模块以避免这种直接循环 循环依赖项的背景信息如下:这是因为您有一个循环依赖项。