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

下面是我的代码,它向主机78.154.17.70 ,端口8080和path/csrftoken.json的Web服务器发出http请求。

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

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

我声明了两个variablesvar CSRFTokenValue;var respJson; 全球。 在request.get ,我使用这些variables作为: respJson存储parsing数据和CSRFTokenValue存储

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

意味着CSRFTokenValue将在其中存储“ajbgajbgjabbjbjbab”。

现在,当我loginCSRFTokenValue里面的CSRFTokenValue ,它会给我“ajbgajbgjabbjbjbab”,但是当我在外面login它会给我不确定的

我需要CSRFTokenValuerequest.post中的quesryString中使用来发布数据。

我不知道如何获得全局的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'); }); 

这是因为当你发出初始请求时,它是asynchronous完成的。 当您的请求在后台完成时,程序会右移到控制stream中的下一个语句。 当请求完成时, 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编程 。

该行, console.log('GET token Globaly:' + CSRFTokenValue); ,会立即执行,绕过你的asynchronous调用request.get('http://78.154.17.70:8080/csrftoken.json'...这就是CSRFTokenValue未定义的原因,因为在声明中,你没有启动它具有价值。

使用promise来运行你的request.post('http://78.154.17.70:8080/Login/post.json?_csrf='...只要在AJAX调用成功的时候在request.get中运行。