如何从节点js中的request.get获取值

时间:2015-08-21 05:13:09

标签: javascript node.js httprequest

以下是我的代码,它向主机 78.154.17.70 ,端口 8080 和路径 /csrftoken.json 的网络服务器发出http请求。

我使用request.get从服务器获取数据。我可以按以下格式获取数据Json data

 {
 "apiVersion": "1.0",
 "data": {
       "csrf": "ajbgajbgjabbjbjbab"
  }
}

我全局声明了两个变量var CSRFTokenValue;var respJson;。在request.get内,我使用以下变量:respJson存储解析数据,CSRFTokenValue存储

  

“csrf”:“ajbgajbgjabbjbjbab”令牌值为“ajbgajbgjabbjbjbab”

表示CSRFTokenValue会在其中存储“ajbgajbgjabbjbjbab”。

现在,当我在CSRFTokenValue内记录request.get时,它会给我“ajbgajbgjabbjbjbab”,但当我在外面登录时,它会给我 undefined

我需要在CSRFTokenValue内的quesryString中使用request.post来发布数据。

我不知道如何全局获取tokenValue?

var request = require('request');

var CSRFTokenValue;
var respJson;
request.get('http://78.154.17.70:8080/csrftoken.json', function (e, res, body){
    respJson = JSON.parse(body);
    CSRFTokenValue = respJson.data.csrf;
    console.log('GET success:' + CSRFTokenValue);
});

console.log('GET token Globaly:' + CSRFTokenValue);

request.post('http://78.154.17.70:8080/Login/post.json?_csrf=' + CSRFTokenValue, {
    'name' : 'name',
    'password' : 'pass'
}, function (res) {
    console.log('success');
});

2 个答案:

答案 0 :(得分:3)

这是因为当你提出初始请求时,它是异步完成的。当您的请求在后台完成时,程序会直接移动到控制流中的下一个语句。请求完成后,CSRFTokenValue将被设置,但您在请求完成之前打印出值,因此它是undefined

试试这个。

var request = require('request');

request.get('http://78.154.17.70:8080/csrftoken.json', function (e, res, body){
    var respJson = JSON.parse(body);
    var CSRFTokenValue = respJson.data.csrf;
    console.log('GET success:' + CSRFTokenValue);

    request.post('http://78.154.17.70:8080/Login/post.json?_csrf=' +     CSRFTokenValue, {
        'name' : 'name',
        'password' : 'pass'
    }, function (res) {
        console.log('success');
    });
});

一旦你从第一个请求获得了令牌,这将是你的第二个请求。

另外,请查看asynchronous programming

答案 1 :(得分:0)

这条线, console.log('GET token Globaly:' + CSRFTokenValue);将立即执行,绕过您的异步调用request.get('http://78.154.17.70:8080/csrftoken.json'...。这就是CSRFTokenValue未定义的原因,因为在声明中,您没有使用值启动它。

使用承诺来运行request.post('http://78.154.17.70:8080/Login/post.json?_csrf='...。当AJAX调用成功时,只需在request.get中运行它。