从上一个请求中获取价值并传递给nodejs中的另一个请求

时间:2019-12-19 17:03:57

标签: javascript node.js express https request

我有一种情况,我试图从下面的POST请求中获取解析后的变量的json响应,我想将其存储在变量中,然后再次传递给标头中的下一个GET请求。我现在尝试的方法无法获得预期的结果,这有什么不对吗?在这里我应该如何获得预期的结果,请多多帮助。

PS:我是nodejs的新手

var request = require('request');

var headers = {
    'Accept': 'application/json',
    'Accept-Encoding': 'gzip, deflate',
    'Authorization': 'Basic Y2Y6',
    'Connection': 'keep-alive',
    'Content-Length': '95',
    'User-Agent': 'python-requests/2.22.0',
    'content-type': 'application/x-www-form-urlencoded'
};

var dataString = 'grant_type=password&username=userpp&password=Password';

var options = {
    url: 'https://testurl/oauth/token',
    method: 'POST',
    headers: headers,
    body: dataString
};
let ab;
function callback(error, response, body) {
    if (!error && response.statusCode == 200) {
        //console.log(body);
        var parsedBody = JSON.parse(body)
        //console.log(parsedBody["access_token"])
        ab = parsedBody["access_token"];

    }
}

request(options, callback);

var headers1 = {
    'Accept': 'application/json',
    'content-type': 'application/x-www-form-urlencoded',
    'Authorization': `'bearer ' ${ab}`
};

var options1 = {
    url: 'https://testurl1.com?getdata=user',
    method: 'GET',
    headers: headers1
};

function callback1(error1, response1, body1) {
    if (!error1 && response1.statusCode == 200) {
        console.log(body1);

    }
}

request(options1, callback1);

1 个答案:

答案 0 :(得分:0)

这里的问题是您正在运行异步代码,但要对其进行同步处理

您看到,当您依次调用request(options, callback);然后内联request(options1, callback1);时,在第二个请求运行时,第一个回调尚未发生

一种解决方法:将第二个请求放在第一个回调函数的内部。

费心的时间:使用request-promise库并学习如何使用Promise和链接.then()回调进行请求。

大脑时间不长:学习如何将异步/等待功能用作与承诺互动的另一种更好的方法