Ich habe erforscht und getestet, wie API-Aufrufe in Knoten js zu tun. Ich versuche derzeit, einen Teil eines JSON-Objekts zu verwenden, das von einem API-Aufruf in einem Modul zurückgegeben wird, um ein Token zurückzugeben.Wie verwende ich einen Teil eines zurückgegebenen Objekts aus einer API-Anfrage als das, was die Funktion zurückgibt?
var request = require("request");
var timestamp = require("unix-timestamp");
var jwt = require("jsonwebtoken");
var EventEmitter = require("events").EventEmitter;
timestamp.round = true;
//create current unix timestamp
var current = timestamp.now();
//create unix experation time
var experation = timestamp.add(current, "+5m");
//create header
var header = {"header"}
//create payload
var payload = {
"iss": process.env.CKEY,
"aud": "https://iformbuilder.com/exzact/api/oauth/token",
"exp": experation,
"iat": current
};
var signature = process.env.SKEY;
//Create assertion
var assert = jwt.sign(payload, signature);
var grant = 'urn:ietf:params:oauth:grant-type:jwt-bearer';
//set the options
var options = { method: 'POST',
url: 'https://iformbuilder.com/exzact/api/oauth/token',
qs: {
grant_type: grant,
assertion: assert
},
headers: {
'content-type': 'application/x-www-form-urlencoded',
'cache-control': 'no-cache'
}
};
var data = {};
var tkn = new EventEmitter();
module.exports = {
token: function() {
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
tkn.body = body;
tkn.emit('update');
});
tkn.on('update', function(){
data = JSON.parse(tkn.body);
return data.access_token;
});
}
}
Das Problem ist, dass ich das zurückgegebene Element nur im Rahmen von tkn.on verwenden kann. Ich kann einen weiteren API-Aufruf verschachteln, um das Token zu verwenden. Ich möchte es jedoch verwenden, ohne den gleichen Code erneut verwenden zu müssen. Die einzige Lösung, mit der ich arbeiten kann, ist das Schreiben in eine Datei. Ich frage mich, ob ich das überhaupt richtig mache. Ich kann anscheinend keine gute Quelle online finden, um mir dabei zu helfen und vielleicht stelle ich die falsche Frage.
Wenn Ihr Modul eine asynchrone Methode verwendet, müssen Sie es asynchron konsumieren. Das heißt, Ihr Funktionsaufruf muss einen Parameter für eine Callback-Funktion annehmen und Sie müssen ihn in Ihren tkn.on (...) Callback aufrufen. Sehen Sie sich das Java-Callback-Muster an und, wenn Sie sich mutig fühlen, Js Promises. Folge dem weißen Hasen. –