Javascript 发送两个nodejs http请求,第二个依赖于第一个

Javascript 发送两个nodejs http请求,第二个依赖于第一个,javascript,node.js,request,Javascript,Node.js,Request,我需要使用用户名/密码组合从服务器获取令牌,然后在收到令牌后,我需要使用令牌作为头的内容发送第二个请求。到目前为止,这就是我所拥有的: var requestData = { 'username': 'myUser', 'password': 'myPassword1234' } var options = { hostname: 'localhost', port: 8080, path: '/login', method: 'POST',

我需要使用用户名/密码组合从服务器获取令牌,然后在收到令牌后,我需要使用令牌作为头的内容发送第二个请求。到目前为止,这就是我所拥有的:

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()
}

第一个请求按预期工作并响应,但第二个请求永远不会发出。我知道函数正在被调用,因为它会打印到控制台,但请求不会打印任何内容。

我会使用
请求承诺
将请求链接在一起非常容易。(代码未测试,但一般要点准确)

var rp=require('request-promise');
变量选项\u登录={
主机名:“localhost”,
端口:8080,
路径:'/login',
方法:“POST”,
标题:{
“内容类型”:“应用程序/json”,
},
有效负载:JSON.stringify(requestData),
json:true
};
变量选项\u请求={
主机名:“localhost”,
端口:8080,
路径:'/dashboard',
方法:“GET”,
json:true
};
rp(选项)
.catch(函数(parsedBody){
log(“登录时出错”);
})
.then(函数(parsedBody){
选项\u request.headers={
“授权”:parsedBody.token,
};
返回rp(选项请求);
})
.catch(函数(err){
log(“加载仪表板失败…”);
});

我尝试查看您的示例和其他一些示例,它只发送第一个请求,不管哪个请求是第一个请求,它只发送第一个请求。你知道为什么会这样吗?