HwangJaeYoung HwangJaeYoung - 5 months ago 15
Node.js Question

How to wait a request response and return the value?

When I use a request module in node.js server, I have some problem such as wait and return.

I would like to receive a "responseObject" value at requestController.

To solve this problem, I have search the best way but I still do not find it.

How can solve this problem?

Thank in advance!! :)

=========================================================================

var requestToServer = require('request');

function getRequest(requestObject) {

var urlInformation = requestObject['urlInformation'];
var headerInformation = requestObject['headerInformation'];

var jsonObject = new Object( );

// Creating the dynamic body set
for(var i = 0; i < headerInformation.length; i++)
jsonObject[headerInformation[i]['headerName']] = headerInformation[i]['headerValue'];

requestToServer({
url : urlInformation,
method : 'GET',
headers : jsonObject
}, function(error, response ,body) {
// todo response controlling
var responseObject = response.headers;
responseObject.body = body;
});
}

// Controlling the submitted request
exports.requestController = function(requestObject) {
var method = requestObject['methodInformation'];
var resultObject = null;

// Selecting the method
if(method == "GET")
resultObject = getRequest(requestObject);
else if(method =="POST")
resultObject = postRequest(requestObject);
else if(method == "PUT")
resultObject = putRequest(requestObject);
else if(method == "DELETE")
resultObject = deleteRequest(requestObject);

console.log(JSON.stringify(resultObject));
}

Answer

You can use callbacks in the following way.

function getRequest(requestObject, callback) {
    // some code
    requestToServer({
       url : urlInformation,
       method : 'GET',
       headers : jsonObject
    }, function(error, response ,body) {
       // todo response controlling
       var responseObject = response.headers;
       responseObject.body = body;
       callback(responseObject);
    }); 
}

And

// Controlling the submitted request
exports.requestController = function(requestObject) {
   var method = requestObject['methodInformation'];

   // Selecting the method
   if(method == "GET")
      getRequest(requestObject, function(resultObject){
          console.log(JSON.stringify(resultObject));
      });

   //some code
}

Hope, it helps.