0

When I run the below code, I get undefined but on console.log(token) I receive data. how can i get to return the response.body as my Engine function return value?

var request = require("request");
var randomstring = require("randomstring");


// Create Reference number
var external_ref_number = "c199-9f9-78f-967e-" + randomstring.generate(12);
//console.log(external_ref_number);



// Function to perform requests
function Engine (interface, token, request_type, external_ref_number, id, mpesa_code)
{

    var data = JSON.stringify({
        "message_validation":
        {
            "api_user": "testuser",
            "api_password": "Ez[=8Ck@",
            "token": token
        },
        "message_route": {
            "interface": interface,
            "request_type": request_type,
            "external_ref_number": external_ref_number
        },
        "message_body": {
            "Id": id,
            "TelcoRef": mpesa_code
        }
    });
    console.log(data);
    var options = {
        'method': 'POST',
        'url': 'http://testurl/api/Solid/SubmitRequest',
        'headers': {
            'Content-Type': 'application/json'
        },
        body: data

    };
    let response;
    request(options, function (error, response)
    {
        if (error) throw new Error(error);

        var token = response.body;
        response = response.body;

        console.log(token);
    });

    return response;
}

var interface = 'TOKEN';
var token = '';
var request_type = ''
// var external_ref_number = external_ref_number;
var id = '';
var mpesa_code = '';
var data = Engine(interface, token, request_type, external_ref_number, id, mpesa_code);
console.log(data); 

Conardson
  • 1
  • 1
  • request receives an callback. This callback is called when the state of the request changes. That request has not yet resolved in your return response; That's why it is undefined at that time but is defined after the callback has been called. Try to read and understand async programming. https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous – Kai Lehmann May 21 '20 at 10:57

1 Answers1

0

Try this

var request = require("request");
var randomstring = require("randomstring");


// Create Reference number
var external_ref_number = "c199-9f9-78f-967e-" + randomstring.generate(12);
//console.log(external_ref_number);



// Function to perform requests
function Engine (interface, token, request_type, external_ref_number, id, mpesa_code, callback)
{

    var data = JSON.stringify({
        "message_validation":
        {
            "api_user": "testuser",
            "api_password": "Ez[=8Ck@",
            "token": token
        },
        "message_route": {
            "interface": interface,
            "request_type": request_type,
            "external_ref_number": external_ref_number
        },
        "message_body": {
            "Id": id,
            "TelcoRef": mpesa_code
        }
    });
    console.log(data);
    var options = {
        'method': 'POST',
        'url': 'http://testurl/api/Solid/SubmitRequest',
        'headers': {
            'Content-Type': 'application/json'
        },
        body: data

    };
    let response;
    request(options, function (error, response)
    {
        if (error) throw new Error(error);

        var token = response.body;
        response = response.body;

        console.log(token);
        callback(null, response);
    });

    //return response;
}

var interface = 'TOKEN';
var token = '';
var request_type = ''
// var external_ref_number = external_ref_number;
var id = '';
var mpesa_code = '';
Engine(interface, token, request_type, external_ref_number, id, mpesa_code, function (err, data) {
 console.log(data); 
});
Rahul Kumar
  • 144
  • 8