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

Javascript 如何从节点js中的request.get获取值,javascript,node.js,httprequest,Javascript,Node.js,Httprequest,下面是我的代码,它向具有主机78.154.17.70、端口8080和路径/csrftoken.json的web服务器发出http请求 我使用request.get从服务器获取数据。我能够获取数据,即Json数据,格式如下: { "apiVersion": "1.0", "data": { "csrf": "ajbgajbgjabbjbjbab" } } 我声明了两个变量var CSRFTokenValue和var-respsjson全局。在request.get中,我使

下面是我的代码,它向具有主机78.154.17.70、端口8080和路径/csrftoken.json的web服务器发出http请求

我使用
request.get
从服务器获取数据。我能够获取数据,即
Json数据
,格式如下:

 {
 "apiVersion": "1.0",
 "data": {
       "csrf": "ajbgajbgjabbjbjbab"
  }
}
我声明了两个变量
var CSRFTokenValue
var-respsjson全局。在
request.get
中,我使用以下变量:
respJson
存储解析数据和
CSRFTokenValue
存储

“csrf”:“AJBGAJBGJABBJB”标记值为“AJBGAJBGJABBJB”

表示
CSRFTokenValue
将在其中存储“ajbgajbgjabbjbab”

现在,当我在
请求中记录
CSRFTokenValue
时,get
会给我“ajbgajbgjabbjbab”,但当我在外部记录时,它会给我未定义的

我需要
CSRFTokenValue
请求内的quesrysting中使用。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');
});
那条线,,
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中运行它。

这是因为当您发出初始请求时,它是异步完成的。当您的请求在后台完成时,程序将直接移动到控制流中的下一条语句。当t完成时,将设置
CSRFTokenValue
,但您在请求完成之前打印出该值,因此它是
未定义的

试试这个

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');
    });
});
这将在您从第一个请求中获得所需的令牌后发出第二个请求


另外,请查看。

感谢BikoMT的快速回复,但我没有收到我的答案。希望这能澄清问题。如果没有,请检查以下内容:。希望这有帮助。感谢Rocky的回答,但当我使用console.log('Status:'+res.statusCode)时;它给出了错误“无法读取null的属性”statusCode“您在哪里运行它?我正在terminal.request.post中运行它(''+CSRFTokenValue,{'name':'name','password':'pass'},函数(res){console.log('Status:'+res.statusCode');console.log('success');});您需要更改函数签名以包含三个参数。请尝试按特定顺序使用error、response和body。现在,它给出了403: