如何从节点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.
我需要CSRFTokenValue
在request.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。
下面是我的代码,它向主机 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.
我需要CSRFTokenValue
在request.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。