SQL-запрос Javascript возвращает только одну строку вместо многих - PullRequest
0 голосов
/ 23 мая 2019

ТАК У меня есть таблица с несколькими строками результатов теста.Идентификатор тестируемого вставляется в каждую строку, и я фактически вставил больше строк в таблицу, используя зарегистрированного пользователя, поэтому я знаю, что это правильно.Результат выводит только один результат на консоль

router.get('/tableResults',function(req, res, next) {
  console.log(req.session.passport.user);
  const db = require('./db_connection.js');
  var id = req.session.passport.user;

  db.query('SELECT * FROM testResults where id = ?',[id], function(error, results, fields) {  
    // results are displayed where the user ids match
    if(error) throw error;
    var results = results[0];

    console.log (" 1st " + results);

    var tableData = [ results]; 

    console.log (tableData);

    res.redirect('/home');
  });
});

// ошибка в шпаклевке

Nodemon] starting `node ./bin/www`

24 

Connected!

 1st [object Object]

[ RowDataPacket {

test_id: 1,

username: 'rr',

gradeOne: 1,

gradeTwo: 7,

gradeThree: 0,

id: 24 } ]

GET /tableResults 302 169.552 ms - 54

24

true
GET /home 304 89.895 ms - -
GET /dist/css/bootstrap.min.css 404 10.086 ms - 3199

Ответы [ 2 ]

0 голосов
/ 23 мая 2019

Вы устанавливаете свои «результаты» только с первым результатом (результат [0]).

Также это избыточно.

Попробуйте так:

router.get('/tableResults',function(req, res, next) {
  console.log(req.session.passport.user);
  const db = require('./db_connection.js');
  var id = req.session.passport.user;

  db.query('SELECT * FROM testResults where id = ?',[id], function(error, results, fields) {  
    // results are displayed where the user ids match
    if(error) throw error;

    console.log ("1st: ", results[0]);
    console.log ('All: ', results);

//here you can iterate [for loop] trough 'results' to show one row at a time if you need/want

    res.redirect('/home');
  });
});

Что я сделал:

1- Исправлена ​​ошибка, при которой результат был установлен на первый результат (прежние результаты = результаты [0])

2- Удалены ненужные var tableData, так как 'results' имеет то же значение.

0 голосов
/ 23 мая 2019

В вашей функции обратного вызова для запроса у вас есть три параметра; error, results, fields. В рамках функции обратного вызова вы объявляете переменную, также называемую results, и назначаете ей первый элемент из параметра results, то есть results[0].

Удалите var results = results[0];, чтобы получить доступ ко всем строкам в результате, вы должны перебрать весь массив;

for(var i = 0; i < results.length; i++) {
  console.log (results[i]);
}

Вы не должны повторять имена переменных, как это. Понимание переменной области является сложной задачей; Какова область видимости переменных в JavaScript? . Чтобы избежать подобных проблем, объявите use strict в верхней части кода, чтобы вызвать Строгий режим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...