如何从API请求中使用返回对象的一部分作为函数返回的内容
How do I use part of a returned object from an API request as what the function returns?
我一直在研究和测试如何在node js中进行API调用。我目前正在尝试使用从模块中的API调用返回的JSON对象的一部分来返回令牌。
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调用来使用令牌。然而,我想使用它,而不必再次使用相同的代码。我能找到的唯一解决方案是写入文件。我甚至在想我的做法是否正确。我似乎在网上找不到任何好的资源来帮助我,也许我问错了问题。
您必须使用回调(或承诺)来获取值。下面是一个回调的例子,我让你研究一下承诺。我想说,先用回调来理解它,然后再去理解承诺。
someOtherModule.js
var tokenGetter = require('./tokenGetter');
function doSomethingWithToken(accessToken){
//Do what you want with the token here
}
tokenGetter.token(doSomethingWithToken);
tokenGetter.js
module.exports = {
token: function(callback) {
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);
callback(data.access_token);
});
}
}
必须这样做的原因是,对于异步操作,您不知道何时会得到响应。代码不再像以前那样是线性的。
你必须调整你的代码来继续它的操作,当你得到一个响应,而不是在你完成操作后。
相关文章:
- Regex提取URL返回数组的一部分;未定义”;
- PHP/Ajax/jquery/JON-在Ajax Post之后将echo文本中的一部分作为变量返回
- 返回javascript中regex字符串的一部分
- 如何返回“;成品“;javascript代码的一部分
- 如果 ui 路由器解析的一部分返回 true 或承诺,我如何编码它
- 返回英国邮政编码只是谷歌地图地理编码结果的一部分
- 何时返回表达式的最后一部分
- 我可以只返回状态对象的一部分而不是整个状态对象的新副本吗
- 如何使用JQuery从REST API仅返回JSON对象的一部分
- Javascript regex match()返回匹配的一部分(子集)
- 尝试使用jQuery检索URL的一部分;它是有效的,但是字符串是无效的;t返回
- D3:在其范围的一部分中返回未定义的序数
- 试图返回选项文本而不是值作为循环的一部分
- 我如何使用window.location.hash返回url的一部分
- 在JavaScript中,如何从方法中通过引用返回数组的一部分
- 如何返回匹配正则表达式的javascript字符串的一部分
- 如何从API请求中使用返回对象的一部分作为函数返回的内容
- 将URL的一部分传递给PHP并从数据库返回结果
- ajax - 仅返回响应文本的一部分
- JSON.parse()只返回对象的一部分