我的应用程序背景
我正在使用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")
})
答案 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的情况下尝试该请求即可。