【问题标题】:NodeJS - Can I parse and use JSON response body in a new request?NodeJS - 我可以在新请求中解析和使用 JSON 响应正文吗?
【发布时间】:2020-02-18 02:01:45
【问题描述】:

首先,请理解我是 nodejs 的新手,实际上是 javascript,因此请相应调整您的回复,因为我可能不熟悉对您来说似乎很明显的概念。

是否有可能(如果是,请指出正确的方向)在新请求中解析和使用 request.get 调用中的响应正文?

例如:

var eventDetails;

function getLatestEvent() {
  var options = {
      url: 'http://localhost:4000/events/get/latest',
      json: true,
      headers: {
          'User-Agent': 'request'
      }
  };
  return new Promise(function(resolve, reject) {
      request.get(options, function(err, resp, body) {
          if (err) {
              reject(err);
          } else {
              resolve(body);
              console.log(body);
          }
      })
  })

}

function resolveLatestEvent() {
  var eventsPromise = getLatestEvent();
  eventsPromise.then(function(result) {
      eventDetails = result;

   // Here I would like to make a new POST request using parts of 
   // the JSON response from the GET request above

   // How can I parse and use the response body in the request,
   // assuming the request looks something like below


   // Send POST request
    const config = { headers: { 'Content-Type': 'application/json' } };

    request.post({
        url: 'http://localhost:3000/events/notify',
        headers: {}, 
        data: {
            title: '',
            team: '',
            day: '',
            creator: '',
            description: '',
            ticket: ''
        }
      }, config);

  // log result
  console.log(eventDetails);
  }, function(err) {
      console.log(err);
  })
}

console.log('Fetching latest event data and making new POST request');
resolveLatestEvent();

GET 请求的示例响应正文:

   [ { title: 'test title',
       team: 'TEST',
       description: 'asd asd asdf sdafsda',
       ticket: 'ABC-12345',
       day: 'Today at 10pm',
       creator: 'user_name' } ] }

【问题讨论】:

    标签: node.js json request


    【解决方案1】:

    由于主体是 JavaScript 对象,您可以使用 . 或键 ['content'] 来引用它。

    所以你会得到回报并像这样使用:

    eventsPromise[0].title
    

    eventsPromise[0]['title']
    

    由于响应在数组内,您应该引用您想要的位置或只是迭代以获取所有位置。

    【讨论】:

    • 感谢您的回复。你为我指明了正确的方向。
    【解决方案2】:

    我上面的代码示例的正确解决方案如下:

    function resolveLatestEvent() {
      var eventsPromise = getLatestEvent();
      eventsPromise.then(function(result) {
          eventDetails = result;
    
            const config = { headers: { 'Content-Type': 'application/json' } };
    
            axios({
                method: 'post',
                url: 'http://localhost:3000/events/notify',
                headers: {}, 
                data: {
                    title: eventDetails[0].title,
                    team: eventDetails[0].team,
                    day: eventDetails[0].day,
                    creator: eventDetails[0].creator,
                    description: eventDetails[0].description,
                    jira: eventDetails[0].ticket
                }
            }, config);
    
    
        // Log out what we get for debugging
        //console.log('here are the eventDetails', eventDetails)
    
    
      }, function(err) {
          console.log(err);
      })
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-14
      • 2018-10-27
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多