Node.js

[node.js] 마지막 콜백에서 response하기

behonestar 2016. 5. 9. 13:49



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)

});