我正在使用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.js和game.js源代码。 Hovewer,在game.js模块的init()函数中,应该再次将initRight字段更改为'AAAAA',但是我可以看到来自播放器模块的播放器功能在游戏模块中是不可见的(我已经检测到当我是将socket.io处理程序移动到不同的模块)。我这样做是因为我已经在不同的项目中看到了它,我真的不希望接下来压倒一些require.js来获取require()函数等等。我的问题是它应该有效吗?如果是,为什么它可能不在这里?
答案 0 :(得分: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.id
函数中有socket
和init
个对象。它在那条线上崩溃了。您应该始终查看您喜欢的Web浏览器的控制台窗口。