Почему это показывает, что функция не определена? Он регистрирует результаты в консоли, я просто пытаюсь перечислить первое имя

#javascript #node.js #json

#язык JavaScript #node.js #json

Вопрос:

У меня есть серверная часть RestAPI, из которой я пытаюсь получить данные. Я использую NodeJS, но по какой-то причине данные загружаются в консоль в формате JSON, но когда я пытаюсь распечатать их на новой веб-странице, я получаю сообщение об ошибке

 TypeError: /Final part 2/views/pages/letseat.ejs:11  9| lt;/divgt;  10| lt;!-- Right here it takes every value that we got back and then puts it into a list item --gt;  gt;gt; 11| lt;% userlist.forEach(function(userlist) { %gt;  12| lt;ul class="list-group list-group-numbered"gt;  13| lt;input type="checkbox" name=lt;%= userlist.firstname %gt;  14| lt;li class="list-group-item"gt;lt;%= userlist['firstname'] %gt;, By: lt;%= userlist['lastname' ]%gt; lt;/ligt;  Cannot read properties of undefined (reading 'forEach')  

Но я получаю данные в формате JSON в терминале

 data: [  {  firstname: 'John',  lastname: 'Boyle',  numberofplaces: null,  user_id: 1  },  {  firstname: 'Ruben',  lastname: 'Holt',  numberofplaces: null,  user_id: 3  },  {  firstname: 'Tim',  lastname: 'Diaz',  numberofplaces: null,  user_id: 4  },  {  firstname: 'Tony',  lastname: 'Santiago',  numberofplaces: null,  user_id: 2  },  {  firstname: 'Scully',  lastname: 'Smith',  numberofplaces: null,  user_id: 5  }  ]  

Функция, которую я использую для визуализации страницы, является

 lt;% userlist.forEach(function(songlist) { %gt;  lt;ul class="list-group list-group-numbered"gt;  lt;input type="checkbox" name=lt;%= userlist.firstname %gt;  lt;li class="list-group-item"gt;lt;%= userlist['firstname'] %gt;, By: lt;%= userlist['lastname' ]%gt; lt;/ligt;  lt;/ulgt;  lt;% }); %gt;   

Наконец, это маршрут API

 app.get('/process_form', function(req, res){  // create a variable to hold the username parsed from the request body  // Now we will use the token wiht the name that the user entered  // For this we will use the axios method to return the result  axios.get('http://127.0.0.1:5000/api/getuser')  .then((response)=gt;{  var userlist = response.data.results;  console.log(userlist);  res.render('pages/letseat', {  userlist: userlist  });  

Пожалуйста, дайте мне несколько советов, я застрял на этом в течение 3 часов!!!

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

1. var userlist = response.data; . Также в вашем forEach вы должны использовать songlist.firstname и т. Д. Нет userlist.firstname

2. Я изменил эту переменную и просто обновил этот код, спасибо за помощь

Ответ №1:

Вы пытаетесь получить доступ к несуществующему свойству и возвращаете его, из-за чего оно не определено.

 var userlist = response.data.results // ^^^^^^^  

response.data это уже массив, который вы хотели. Так что тебе нужно переодеться в

 var userlist = response.data  

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

1. значит, я не должен получать результаты? Извините, мой профессор очень быстро пошел на урок, так что я немного сбит с толку. Поэтому я подумал, что когда я назначаю response.data.results, он возвращает объект json, который сохраняется в списке пользователей переменной

2. Вы не должны иметь доступа к собственности results . Его не существует, поэтому список пользователей в файле EJS не определен.

3. Хорошо, это решило мою проблему, большое вам спасибо