访问JSON Covid数据时出现问题

时间:2020-05-14 05:48:06

标签: javascript node.js reactjs

我的应用程序背景

我正在使用react和node js。我使用axios将node.js连接到react.js。

问题

我正在尝试访问Afganistan中的案例(5226),但似乎无法为其找到合适的变量。

const cases = covidData[0].cases

每当我尝试使用nodemon(运行服务器)和npm start(运行我的React应用程序)运行应用程序时,在终端上都会收到以下错误消息

节点终端错误

[nodemon] starting `node ./server.js`
listening at port 5000
200
undefined:1
[{"updated":1589436777722,"country":"Afghanistan","countryInfo":{"_id":4,"iso2":"AF","iso3":"AFG","lat":33,"long":65,"flag":"https://disease.sh/assets/img/flags/af.png"},"cases":5226,"todayCases":0,"deaths":132,"todayDeaths":0,"recovered":648,"active":4446,"critical":7,"casesPerOneMillion":134,"deathsPerOneMillion":3,"tests":18724,"testsPerOneMillion":481,"continent":"Asia"},{"updated":1589436777821,"country":"Albania","countryInfo":{"_id":8,"iso2":"AL","iso3":"ALB","lat":41,"long":20,"flag":"https://disease.sh/assets/img/flags/al.png"},"cases":880,"todayCases":0,"deaths":31,"todayDeaths":0,"recovered"


SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at IncomingMessage.<anonymous> (/Users/alfietorres/github/covid19/server.js:13:30)
    at IncomingMessage.emit (events.js:198:13)
    at IncomingMessage.Readable.read (_stream_readable.js:504:10)
    at flow (_stream_readable.js:973:34)
    at resume_ (_stream_readable.js:954:3)
    at process._tickCallback (internal/process/next_tick.js:63:19)
[nodemon] app crashed - waiting for file changes before starting...


网站的JSON

[
 {
 "updated": 1589433177684,
 "country": "Afghanistan",
 "countryInfo": {
  "_id": 4,
  "iso2": "AF",
  "iso3": "AFG",
  "lat": 33,
  "long": 65,
  "flag": "https://disease.sh/assets/img/flags/af.png"
 },
 "cases": 5226,
 "todayCases": 0,
 "deaths": 132,
 "todayDeaths": 0,
 "recovered": 648,
 "active": 4446,
 "critical": 7,
 "casesPerOneMillion": 134,
 "deathsPerOneMillion": 3,
 "tests": 18724,
 "testsPerOneMillion": 481,
 "continent": "Asia"
 },
 {
.
.
.
etc

Node.js代码

const express = require("express");
const app = express();
const https = require("https");

const url = "https://disease.sh/v2/countries/";


app.get("/getData",function(req,res){
  https.get(url, function(response){
      console.log(response.statusCode)

      response.on("data",function(data){
        const covidData=JSON.parse(data)
        // const cases = covidData.cases
        res.send({covidData});
      })

    }, function(err){ console.log(err)})
  }
)


app.listen(5000,function(){
  console.log("listening at port 5000")
})


1 个答案:

答案 0 :(得分:2)

当您遇到这样的问题时,首先要做的就是检查错误,换句话说,为错误添加处理程序,以查看发生了什么问题

  https.get('https://disease.sh/v2/countries', function(response){
    console.log(response.statusCode)

  }, function(err){ console.log(err)})

错误是连接被拒绝,这意味着它无法连接到远程服务器,如您所见,您在URL中缺少斜杠以进行修复:

  https.get('https://disease.sh/v2/countries/', function(response){
    console.log(response.statusCode)

  }, function(err){ console.log(err)})

或者更好地使用更清晰的request

版本
const request = require('request');

request('https://disease.sh/v2/countries', function (error, response, body) {
  console.error('error:', error); // Print the error if one occurred
  console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received
  console.log('body:', JSON.parse(body)[0].cases); // get cases from the country you specified Afghanistan
});

这是来自他们的官方文档,我只是将网址更改为您的网址。

您可以通过在终端中打开节点来单独测试此请求,只需键入node,然后在没有Express Server的情况下尝试该请求即可。