我需要使用用户名/密码组合从服务器获取令牌,然后在收到令牌后,我需要使用令牌作为标头的内容发送第二个请求。到目前为止,这就是我所拥有的:
var requestData = {
'username': 'myUser',
'password': 'myPassword1234'
}
var options = {
hostname: 'localhost',
port: 8080,
path: '/login',
method: 'POST',
headers: {
'Content-Type': 'application/json',
}
}
var req = http.request(options, function(res) {
console.log("Status: " + res.statusCode)
res.setEncoding('utf8');
let body = ""
res.on('data', function (data) {
if (res.statusCode == 200) {
console.log("Success")
body += data
} else {
invalidLogin()
}
})
res.on('end', function () {
body = JSON.parse(body)
console.log("DONE")
console.log(body)
validLogin(body["token"])
})
})
req.on('error', function(e) {
console.log('error: ' + e.message)
})
req.write(JSON.stringify(requestData))
req.end()
然后在validLogin()
(在第一个请求中调用),我有这个:
function validLogin(token) {
console.log(token)
var options = {
hostname: 'localhost',
port: 8080,
path: '/dashboard',
method: 'GET',
headers: {
'Authorization': token,
}
}
var req = http.request(options, function(res) {
console.log("Status: " + res.statusCode)
res.setEncoding('utf8');
let body = ""
res.on('data', function (data) {
if (res.statusCode == 200) {
body += data
} else {
console.log(body)
}
})
res.on('end', function() {
console.log(body)
})
})
req.on('error', function(e) {
console.log('error: ' + e.message)
})
req.end()
}
第一个请求按预期工作并响应,但第二个请求永远不会响应。我知道正在调用该函数,因为它打印到控制台,但请求不会打印任何内容。
答案 0 :(得分:0)
我会使用request-promise
它使链接请求变得非常容易。 (代码未经过测试,但一般要点是准确的)
var rp = require('request-promise');
var options_login = {
hostname: 'localhost',
port: 8080,
path: '/login',
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
payload: JSON.stringify(requestData),
json: true
};
var options_request = {
hostname: 'localhost',
port: 8080,
path: '/dashboard',
method: 'GET',
json: true
};
rp(options)
.catch(function(parsedBody){
console.log("Error logging in.");
})
.then(function(parsedBody) {
options_request.headers = {
'Authorization': parsedBody.token,
};
return rp(options_request);
})
.catch(function(err) {
console.log("Loading the dashboard failed...");
});