exportando un módulo en una función de callback?

¿hay una manera de exportar algunas variables que están dentro de una función de callback? por ejemplo, si necesito usar room.room_id en otro archivo, ¿qué debo hacer? Probé module.exports.roomId = room.room_id pero roomId en otro archivo parecía ser 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; }) }) 

};

No puedes hacerlo así porque los módulos se evalúan de forma síncrona y estás module.exports algún tiempo en el futuro. Lo que debe hacer es proporcionar una callback y pasar el valor o usar la callback como un indicador que puede leer con éxito desde la propiedad exportada.

Esta no es la mejor manera de resolver este problema, porque los módulos se leen una vez de forma sincrónica y se almacenan en caché, pero su código parece manejar las solicitudes y respuestas.

Querrá más bien exportar algo como esto:

 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; 

Si está utilizando Express.js, puede registrar en otro lugar una ruta como esta:

 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"]);