在callback函数中导出模块?

有没有办法导出一些callback函数内的variables? 例如,如果我需要在另一个文件中使用room.room_id,我应该怎么做? 我试过module.exports.roomId = room.room_id,但在另一个文件的roomId似乎是undefined.thanks!

var Room = require('../models/database').Room exports.create = function (req, res) { Room .create({ room_name: req.body.roomName }) .complete(function () { Room .find({where: {room_name: req.body.roomName}}) .success(function (room) { // if(err) console.log(err); res.redirect('rooms/videochat/' + req.body.roomName + '/' + room.room_id); console.log("room_id: " + room.room_id); module.exports.roomId = room.room_id; }) }) 

};

你不能这样做,因为模块是同步评估的,你将会在将来的某个时间改变module.exports 。 你需要做的是提供一个callback,并传入值或使用callback作为一个指标,你可以成功地从导出的属性读取。

这不是解决这个问题的最好方法,因为模块是同步读取和caching的,但是你的代码似乎处理请求和响应。

你会想要导出这样的东西:

 var rooms = {}; exports.create = function (req, res, next) { Room.create({ room_name: req.body.roomName }).complete(function () { Room.find({where: {room_name: req.body.roomName}}) .success(function (room) { res.redirect('rooms/videochat/' + req.body.roomName + '/' + room.room_id); rooms[req.body.roomName] = room.room_id; }); }); }; exports.rooms = rooms; 

如果您使用的是Express.js,则可以在另一个地方注册这样的路线:

 var roomsManager = require('./path/to/the/module'); //handle the create room endpoint app.post('/room', roomsManager.create); //get the room_id given a room name: console.log('the room id of "some room" is:', roomsManager.rooms["some room"]);