저는 노드 j에서 API 호출을 수행하는 방법을 연구하고 테스트했습니다. 현재 Token을 반환하기 위해 모듈에서 API 호출로부터 반환 된 JSON 객체의 일부를 사용하려고합니다.함수가 반환하는 값으로 API 요청에서 반환 된 객체의 일부를 어떻게 사용합니까?
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;
});
}
}
문제점은 반환 된 항목을 tkn.on의 범위 내에서만 사용할 수 있다는 점입니다. 내에서 다른 API 호출을 중첩하여 토큰을 사용할 수 있습니다. 그러나 같은 코드를 다시 사용하지 않고도 사용하고 싶습니다. 내가 해결할 수있는 유일한 해결책은 파일에 쓰는 것입니다. 나는 이것이 올바른 방향으로 가고 있는지 궁금해. 나는 이것으로 나를 돕기 위해 온라인에서 좋은 정보원을 찾지 못하고 잘못된 질문을하고있다.
모듈에서 일부 비동기 메서드를 사용하는 경우 비동기 적으로 사용해야합니다. 즉, 함수 호출은 콜백 함수의 매개 변수를 가져와야하고,이를 tkn.on (...) 콜백으로 호출해야합니다. javacript 콜백 패턴을 살펴보고, 용감하다고 느끼면 Js Promises. 흰 토끼를 따라 가라. –