所以我有一个包含多行测试结果的表。应试者的ID插入到每一行中,实际上我已经使用登录的用户在表中插入了更多行,因此我知道它的正确性。 结果只是将一个结果打印到控制台上
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
答案 0 :(得分:0)
在查询的回调函数中,您具有三个参数; error
,results
,fields
。在回调函数的范围内,您声明一个变量也称为results
,并将其分配给results
参数的第一项,即results[0]
。
删除var results = results[0];
,然后访问结果中的所有行,应遍历整个数组;
for(var i = 0; i < results.length; i++) {
console.log (results[i]);
}
您不应重复这样的变量名。了解可变范围具有挑战性; What is the scope of variables in JavaScript?。为避免此类问题,请在代码顶部声明use strict
来触发Strict Mode
答案 1 :(得分:0)
您要仅以第一个结果(结果[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-固定将结果设置为第一个结果(以前的结果= results [0])
2-删除了不必要的var tableData,因为'results'具有相同的值。