NodeJS在下一个请求之前等待HTTP响应

时间:2018-10-07 10:17:44

标签: javascript node.js http

我的NodeJS代码完全失败了。我需要向REST API发出HTTP请求-该API向我发送了新的URL作为响应。收到该URL后,我需要向该URL发出请求,依此类推。

我正在使用

SamDbContainer

软件包。响应如下所示:

var request = require('request');

我该怎么做?我是NodeJS领域的新手,但是我已经有很多使用JavaScript的经验。因此,对我来说这不是一个大问题。

我听说过有关{ "nextURL": "http:// ..." } 的内容,但我不知道这是否是正确的选择。请帮帮我!

3 个答案:

答案 0 :(得分:1)

我想你可以这样

const request = require('request');

    request('https://api.xxx', { json: true }, (err, 
    res, body) => {
      if(response.statusCode === 200) {

         nextUrl(body['nextURL']);
      }

      else (err) {
       return console.log(err); 
      }

    });

    function nextUrl(url){
       request(url, { json: true }, (err, 
       res, body) => {
      if(response.statusCode === 200) {

        //your logic
      }

      else (err) {
       return console.log(err); 
      }

      });
    }

答案 1 :(得分:0)

我认为您正在寻找这个

Promise是创建Promise时不一定知道的值的代理。它允许您将处理程序与异步操作的最终成功值或失败原因相关联。这样一来,异步方法就可以像同步方法一样返回值:在将来的某个时候,异步方法将返回最终值,而不是最终值。

var request = require('request-promise');

var baseUrl = 'http://111.111.111.111:8080';

request.post(baseUrl + '/api/auth/login')
.then(function(body) {
    console.log("login OK: " + body);
}).then(function() {
    return request.post(baseUrl + '/api/auth/login'); // <-- inside a function
}).then(function(body) {
    console.log("login OK again: " + body);
}).catch(function (err) {
    console.error(err);
});

答案 2 :(得分:0)

我建议您使用以下格式的承诺的http客户端,例如axios

const axios = require('axios');
axios.get('firstURL')
     .then(firstRes=>{
           return axios.get(firstRes.data.nextURL)
     })
     .then(secondRes=>{
           console.log(secondRes.data)
     })
     .catch(err=>{

     console.log('something went wrong', err);

   })