Node.js在其他模块中使用require时获取未定义的属性

时间:2013-03-10 21:19:40

标签: javascript node.js socket.io

这就是我的app.js看起来的样子

var app = require('http').createServer(handler),
    io = require('socket.io').listen(app),
    static = require('node-static'); // for serving files
var game = require('./game.js').createGame();

// This will make all the files in the current folder
// accessible from the web
var fileServer = new static.Server('./');

// This is the port for our web server.
// you will need to go to http://localhost:8080 to see it
app.listen(8080);

// Listen for incoming connections from clients
io.sockets.on('connection', function (socket) {
    handle Events ... 
});

exports.io = io;
exports.game = game;

当我尝试访问创建的socket.io列表器或游戏实例时,我得到错误说它未定义。 这是我试图在技巧,js

中访问它
var game = require('./app.js').game;
var socketio = require('./app.js').io;
var PlayerMove = require('./playerMove.js');

这可能是因为trick.js实际上是在app.js之前执行的(我放了调试点并且在那里确认了)。我该如何避免这种情况?有没有更好的方法在node.js中公开对象实例,我应该使用哪种模式?

1 个答案:

答案 0 :(得分:0)

声明变量不会导出它。如果您需要为模块导出内容,则应使用exports.myVariable = myValue。

第一次要求你的app.js文件将运行它。因此,一旦您退出require()调用

,您在其中导出的所有内容都将可用