Javascript 如何从节点js中的request.get获取值
下面是我的代码,它向具有主机78.154.17.70、端口8080和路径/csrftoken.json的web服务器发出http请求 我使用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中,我使
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: