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

how to get the value from request.get in node js

下面是我的代码,它向主机 78.154.17.70、端口 8080 和路径 [=40] 的 Web 服务器发出 http 请求=]/csrftoken.json。

我使用request.get 从服务器获取数据。我能够获取以下格式的 Json data 数据:

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

我全局声明了两个变量var CSRFTokenValue;var respJson;。在 request.get 中,我将这些变量用作:respJson 存储解析数据,CSRFTokenValue 存储

"csrf": "ajbgajbgjabbjbjbab" token value as "ajbgajbgjabbjbjbab"

表示CSRFTokenValue将在其中存储"ajbgajbgjabbjbjbab"。

现在,当我在 request.get 中登录 CSRFTokenValue 时,它会给我 "ajbgajbgjabbjbjbab" 但是当我在外部登录时,它会给我 undefined.

我需要CSRFTokenValuerequest.post的quesryString中使用到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 内。

这是因为当您发出初始请求时,它是异步完成的。当您的请求在后台完成时,程序会向右移动到控制流中的下一条语句。请求完成后,将设置 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