Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 模块中的NodeJS必需模块始终未定义_Javascript_Node.js_Undefined - Fatal编程技术网

Javascript 模块中的NodeJS必需模块始终未定义

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"

我对后端代码非常陌生。现在,我尝试学习nodeJS服务器的体系结构

我认为我现在的问题很简单,但我无法解决--

server.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
然后我有3个模块:

  • 玩家
  • 房间
  • 游戏
  • 每个模块的结构相同:

    Player.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;
    
    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

    模块之间存在循环依赖关系

    你从要求玩家开始。它做的第一件事就是需要空间。房间需要玩家。此时,播放机尚未完成加载。节点通过返回不完整的播放器版本来防止发生无限循环。在这一点上,所有关于将要发生的事情的赌注都没有了

    您需要构建模块以避免这种直接循环

    循环依赖项的背景信息如下:

    这是因为您有一个循环依赖项。