Не удается получить доступ к JSON API и выдает мне ошибку ссылки

#node.js #express #ejs

#node.js #выразить #ejs

Вопрос:

Я получаю ошибку ссылки при попытке получить доступ к следующему API formula one API

Ошибка, которую я получаю, заключается в том, что я не могу получить доступ к MRData. Я использовал редактор JSON, и я уверен, что у меня есть правильный путь. Ниже приведен запрос post.

 app.get('/about', function(req, res){
res.render('about', {standings: null});
});

app.post('/about', function(req, res){
var year = req.body.Year;

var url = `http://ergast.com/api/f1/${year}/driverstandings.json?callback=`
request(url, function (err, response, body){
  if(err){
    res.render('about', {standings: null, error: 'Error, please try again'});
  } else {
    let standings = JSON.parse(body)
    if(standings.MRData === undefined) {
      res.render('about', {standings: null, error: 'Error, please try again'});
    } else {
      let firstName = MRData.StandingsTable.StandingsLists[0].DriverStandings[0].Driver.givenName
      let standingsText = `The winner of the formula 1 championship in the year ${MRData.StandingsTable.season} is ${firstName}`;
      res.render('about', {standings: standingsText, error: null});
    }
   }

 });

 });
  

Буду признателен за любую помощь. Спасибо, что изучили это.

Комментарии:

1. я не думаю, что вы можете выполнять обратные вызовы jsonp в node.js как этот приятель. я имею в виду, что вы, вероятно, могли бы eval() отредактировать ответ, но я бы счел это опасным. лучше использовать библиотеку, которую кто-то уже создал и протестировал для этой цели. возможно, вы захотите изучить возможность использования следующей библиотеки github.com/then/then-jsonp

2. Что именно представляет собой сообщение об ошибке? В какой строке это происходит в приведенном выше фрагменте?

3. это сообщение об ошибке, которое я получаю /Users/briankaty1/Desktop/Udemy_WebCourse/weather_api/index.js:77 let firstName = MRData.StandingsTable.StandingsLists[0].DriverStandings[0].Driver.givenName

4. Приведенный ниже ответ указывает на ту же ошибку. Это исправит это.

Ответ №1:

Я могу придумать 1 синтаксическую ошибку и 1 необязательный сценарий.

Синтаксическая ошибка:

В else части, на которую вы ссылаетесь напрямую MRData , тогда как вы должны ссылаться на нее с помощью standings.MRData . Как для firstName , так и standingsText

 let firstName = standings.MRData.StandingsTable.StandingsLists[0].DriverStandings[0].Driver.givenName
let standingsText = `The winner of the formula 1 championship in the year ${standings.MRData.StandingsTable.season} is ${firstName}`;
  

Другой сценарий req.body.Year может быть пустым, и вы используете его, поэтому запись URL-адреса в консоль может привести к решению.

Комментарии:

1. downvoter: Я не вижу, в чем проблема, я ясно вижу, что есть синтаксические ошибки, и я указал на них. Даже если проблема кроется в другом месте, это исправление должно было быть сделано, иначе любой ответ привел бы к «нет, не работает, все еще ошибка ссылки»