[node.js] 마지막 콜백에서 response하기
express의 res 파라미터를 마지막 콜백 함수에서 호출할 수 있도록 클로져를 활용한다.
app.get('/server', function (req, res) { //-------------------(1)
var req_id = uuid.v4();
var reqa = zmq.socket('req');
var reqb = zmq.socket('req');
var clear_resource = function() {
reqa.close();
reqb.close();
clearTimeout(tid);
}
var tid = setTimeout(function(){
console.log('------zmq timeout------')
res.sendStatus(408);
clear_resource();
}, 10000);
reqa.connect('tcp://localhost:5554');
reqb.connect('tcp://localhost:5555');
reqa.on('message', function(msg) { //-------------------(3)
var resp = JSON.parse(msg.toString());
console.log('------resp 1-------')
console.log(resp);
if (resp.code != 200) {
res.sendStatus(resp.code);
clear_resource();
return;
}
setTimeout(function(){
reqb.send(req_id); //---------------------------------(4)
}, 500);
});
reqb.on('message', function(msg) { //------------------(5)
var resp = JSON.parse(msg.toString());
console.log('------resp 2-------')
console.log(resp);
if (resp.code != 200) {
res.sendStatus(resp.code);
clear_resource();
return;
}
res.send(resp.data); //----------------------------------(6)
clear_resource();
});
reqa.send(req_id); //-------------------------------------(2)
});