发送服务器请求api时返回服务器错误

时间:2019-07-08 06:00:36

标签: javascript node.js

我有一个Node js应用程序,我正在从网站上抓取数据。我已经将节点api部署为天蓝色。我正在从api获取不同日期的数据。当所选日期有数据时,该API效果很好。但是,在所选日期没有数据时,它将返回服务器错误。返回服务器错误后,当我选择另一个包含数据的日期时,它不返回任何数据。为什么会这样呢?这是我现在的代码:

const express = require('express');
const request = require('request');
const cheerio = require('cheerio');
const router = express.Router();

router.get('/:id?', (req, res, next) => {
  let url = 'https://scrapingwebsite/' + req.params.id
  
  let resultTable = []
  let resultTable2 = []
  let resultTable3 = []
  let fr = []
  let sc = []
  let resultTable4 = []
  let resultTable5 = []
  let resultTable6 = []
  let resultTable7 = []
  let resultTable8 = []
  let resultTable9 = []
  let mdate = []
  let mdraw = []
  request(url, (error, response, html) => {
    if (!error && response.statusCode == 200) {
      const $ = cheerio.load(html);
      $('.resultTable').each((i, el) => {
        let resultTop = $(el).find('.resultTable2').text()
        resultTable2.push(resultTop)
        
       
        let resultBottomFirst = $(el).find('.resultbottom').text()
        resultTable4.push(resultBottomFirst)
        

        let resultBottomSecond = $(el).find('.resultbottom').text()
        resultTable7.push(resultBottomSecond)
      })
      let first = resultTable2[0].toString()
      console.log(resultTable2[0])
      let date = first.slice(18, 28)
      let draw = first.slice(34, 49)
      let firstPrize = first.slice(61, 65)
      let firstP = ['1st Prize',firstPrize ]
      let secondPrize = first.slice(77, 81)
      let secondP = ['2nd Prize',secondPrize ]
      let thirdPrize = first.slice(93, 97)
      let thirdP = ['3rd Prize',thirdPrize ]
      resultTable = resultTable2[0]
      resultTable3.push(firstPrize, secondPrize, thirdPrize)
      fr.push(resultTable3)
      sc.push(firstP,secondP,thirdP)

      mdate.push(date) 
      mdraw.push(draw)

      resultTable5 = resultTable4[0]
      let middle = resultTable4[0].toString()
      let resultBottom1 = middle.match(/.{1,4}/g).slice(0,5)
      let resultBottom2 = middle.match(/.{1,4}/g).slice(5,10)
      let resultBottom3 = middle.match(/.{1,4}/g).slice(10,13)
      resultTable6.push(resultBottom1,resultBottom2,resultBottom3) 

      resultTable8 = resultTable7[0]
      let last = resultTable7[0].toString()
      let resultBottom4 = last.match(/.{1,4}/g).slice(13,18)
      let resultBottom5 = last.match(/.{1,4}/g).slice(18,23)
      resultTable9.push(resultBottom4, resultBottom5)
    }
   
      res.status(200).json({
        date: mdate,
        draw: mdraw,
        magnum: fr,
        magnum2: sc,
        special: resultTable6,
        consolation: resultTable9
      });
  });

});

module.exports = router;

1 个答案:

答案 0 :(得分:2)

我猜没有数据时,您的resultTable2,resultTable4,resultTable7变为null,并且toString()操作因此失败。这就是为什么您的api无法返回数据并卡住的原因。