2017-11-29 5 views
0

Ich stehe vor einem seltsamen Problem. Ich definiere eine Variable in meinem Code, benutze sie um einen Anruf zu machen und lass es dann so. Wenn ich versuche, es später erneut zu verwenden, wird die Variable geändert - wahrscheinlich serialisiert. Wie kann ich es in der ursprünglichen Form zurückbekommen?Definierte Variable, die in node.js geändert wird

Hier ist mein Code.

const restler = require('restler'); 

var baas_host = 'hostname'; 
var baas_app = 'appname'; 
var access_options = { 
    data: { 
    grant_type: 'client_credentials', 
    client_id: 'id', 
    client_secret: 'secret' 
    } 
} 

// Get an access_token 
var access_token; 
getAccessToken(function (data_token) { 
    access_token = data_token; 
}); 

function getAccessToken(cb) { 
    //****Here is where I see different results****// 
    console.log("access_options::", access_options); 

    restler.post(baas_host+'/'+baas_app+'/token', access_options).on('complete', function (data, response) { 
     cb(data.access_token); 
    }); 
}; 

// Refresh if access token expired 
function refreshAccessToken() { 
    console.log("refreshAccessToken called."); 
    // Call getAccessToken again 
    getAccessToken(function (data_token) { 
    access_token = data_token; 
    }); 
} 

Wenn ich versuche, später wieder access_options im refreshAccessToken() Anruf wieder zu verwenden, hier ist das, was ich in der zweiten Iteration als der Wert von access_options

{ data: <Buffer 67 72 61 6e 74 ... >, 
    method: 'POST', 
    parser: 
    { [Function: auto] 
    matchers: 
     { 'application/json': [Function: json], 
     'application/yaml': [Function], 
     'application/xml': [Object] } }, 
    followRedirects: true } 

Bitte helfen Sie mir zu verstehen, gedruckt sehen werden, was passiert hinter den Kulissen?

Antwort

0

Sie deklarieren access_token als eine Modulvariable und indem Sie dies bei jeder Anfrage ändern. Sie müssen ihn in einen Funktionsumfang setzen, damit er für die Anforderung "privat" ist

0

Das einzige, was mir in den Sinn kommt, ist, dass die Restler-Bibliothek Ihr Objekt verändert. Versuchen Sie, ein neues Objekt mit den Informationen zu erstellen, die Sie gerade vor der Datei restler.post benötigen. So etwas wie ein access_options_temp

Verwandte Themen