如何从节点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它会给我不确定的 。
我需要CSRFTokenValue
在request.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中运行。
- HTTP请求node.js使用mikeal的“请求”
- q-io:如何使用Promises读取response.body JSON对象?
- 在NodeJs中,我怎么才能等到我的http获得完成?
- 根据要求提供JSON或HTML服务?
- 如何将ipv6地址转换为nodejs expressjs中的ipv4地址?
- 在下载XML Feed时处理多种编码scheme
- 发送httprequest到Heroku节点js应用程序在客户端得到“连接被拒绝”错误
- node.js – 请求 – 如何“emitter.setMaxListeners()”?
- nodejs – 如何promisify http.request? 拒绝被叫了两次