如何从节点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中运行。
- nodejs – 如何promisify http.request? 拒绝被叫了两次
- 如何获得两个date之间的历史股票数据?
- 了解Express.js中间件的优先级
- Node.js`“http.get”不会返回给浏览器的完整响应体,而只是一个<head>标记。 如何得到完整的回应?
- 使用node.js中的HTTP请求中的数据
- 在同一位置区分请求参数?
- 转换node.js HTTP响应函数(使用“请求”库)来使用stream
- 如何捕获节点js / Java中的networking调用?
- 如何在express js中添加'res.addHeader(“Access-Control-Allow-Origin”,“*”)?