2014-04-29 2 views
2

콜백 함수 안에있는 일부 변수를 내보내는 방법이 있습니까? 예를 들어 다른 파일에서 room.room_id를 사용해야하는 경우 어떻게해야합니까? 나는 module.exports.roomId = room.room_id를 시도했지만 다른 파일의 roomId는 정의되지 않은 것으로 보입니다. 감사합니다!콜백 함수에서 모듈 내보내기?

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; 
     }) 

    }) 

}};

답변

1

모듈이 동 기적으로 평가되고 향후에 module.exports이라고 돌연변이를 나타 내기 때문에 그렇게 할 수 없습니다. 콜백을 제공하고 값을 전달하거나 콜백을 지표로 사용하여 내 보낸 속성에서 성공적으로 읽을 수 있습니다.

+0

감사합니다. 콜백을 제공하면 어떤 의미입니까? 어디 콜백 함수를 배치해야합니까? –

+0

'exports.getRoomId = function (cb) {/ * 비동기 호출을하고 cb (null, room.room_id)를 호출 할 수 있습니다; 또는 cb (오류); on error * /};'그런 다음이 모듈을 require()하는 스크립트에서 콜백을 전달하십시오 :'require ('./foo'). getRoomId (function (err, roomId) {...}); ' – mscdex

+0

나는 당신의 설명을 이해했다고 생각합니다. 내 기존 코드는 이미 수출에 포함되어 있습니다. 방금 내 질문을 편집했습니다. –

0

이 문제를 해결하는 가장 좋은 방법은 모듈을 동 기적으로 읽고 캐시하지만 코드는 요청과 응답을 처리하는 것 같습니다.

당신은 오히려 이런 식 수출 원할 것입니다 : 당신이 Express.js를 사용하는 경우

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; 

, 당신은 이런 식으로 다른 장소에 경로를 등록 할 수 있습니다 : 답장을 보내

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

감사하지만 room.room_id를 내보내려고 다른 파일에서도 사용할 수 있습니다. 내가 어떻게 그럴 수 있니? –

+0

방 이름 -> 방 ID의 해시 맵을 유지하고 싶습니다. 편집 된 답변을 살펴보십시오. 덕분에 –

+0

. 내 나쁜 내가 언급하지 않았다 room_id 내 데이터베이스에 auto_increment입니다. 그래서 중복 그 hashmap 사용하는 권리? –