-3

我正在使用 node.js+express+socket.io 编写游戏。我花了很长时间才到达我现在的位置,但我觉得它终于找到了我。我有以这种方式提供 html 和 js 文件的服务器:

app.post('/game', function(req, res) {
     handleGame(req, res); //it opens file using fs and forwards with res.end(readFile);
});

app.get('/scripts/*', function(req, res) {
     handleStatic(req, res); //same schema
});

现在,我已经登录并访问了网站game.html(从第一个 app.post 收到)。它加载正常,initRight 更改为“bbbb”,如果我在 Firefox 中打开“源代码”,我可以单击并查看player.jsgame.js源代码。但是,在 game.js 模块的 init() 函数内部,应该将 initRight 字段再次更改为“AAAAA”,但正如我所见,玩家模块中的 Player 函数在游戏模块中是不可见的(我已经检测到当我在将 socket.io 处理程序移动到不同的模块)。我这样做是因为我在不同的项目中看到过它,我真的不希望下一次通过放置一些 require.js 来获得 require() 函数等而不知所措。我的问题是它应该工作吗?如果是,为什么它可能不在这里?

4

1 回答 1

1

虽然您的问题令人困惑,并且我没有看到您的问题与 NodeJS 的联系,但问题是您的 JavaScript 存在多个问题。

我将您的代码复制到 JSBin:

http://jsbin.com/iqudic/4/edit (直播: http: //jsbin.com/iqudic/4

然后,我稍微清理了一下。

您可能希望将关联的属性放在 Player 对象的实例上,而不是像以前那样将它们作为新对象返回。

var Player = function(playerNick, playerId, playerSocket) {
  this.nick = playerNick;
  this.id = playerId;
  this.socket = playerSocket;
};

其次,这导致AAAAAA不出现:

function init() {
    // socket and socket.id should be defined before creating the Player
    localPlayer = new Player('AAAAAA', socket.id, socket);
    document.getElementById('initRight').innerHTML = localPlayer.nick;
}

您的代码假定函数中有一个socket.idsocket对象可用init。它在那条线上崩溃了。您应该始终查看您最喜欢的 Web 浏览器的控制台窗口。

未定义套接字

于 2013-04-07T16:14:18.207 回答