我已经开始使用Node.js而且我完全不知道为什么我无法在页面上呈现我的SQL查询结果,我正在使用sqlite3的。 这是我的index.js文件的一部分
router.get('/students', function (req, res, module) {
var fs = require("fs");
var file = "./test.db";
var exists = fs.existsSync(file);
if (!exists) {
console.log("Creating DB file.");
fs.openSync(file, "w");
}
var sqlite3 = require("sqlite3").verbose();
var db = new sqlite3.Database(file);
db.serialize(function () {
if (!exists) {
db.run("Create table students ( ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, Nom varchar (255), Prenom varchar (255) );");
}
});
db.all('SELECT * FROM students', function selectCb(err, rows, fields) {
if (err) {
throw err;
}
for (var i in rows) {
console.log(rows[i]);
}
res.render('showResults.jade', {
results: rows
});
});
db.close();
res.render('students', { title: 'list' });
});
这是我的Jade(create.jade)文件;
block content
form(method='get', action='/students/create')
button(type='submit') Creer
ul
each item, i in results
li #{item.Nom} (#{item.Prenom})
li= JSON.stringify(item)
我把所有这些东西放在我的快递应用程序中,我用我的shell启动它,我收到所有这样的sql数据:
{ ID: 1, Nom: 'zeze', Prenom: 'zeze' }
{ ID: 2, Nom: 'ertty', Prenom: 'uuuuuuuuuuu' }
但是我的/学生页面显示了一条消息
http://i.stack.imgur.com/ormUG.png
你能帮助我吗,我真的很绝望。 (抱歉我的英语不好我是法语)^^
答案 0 :(得分:6)
res.render('students', { title: 'list' });
和这一行
each item, i in results
变量名称不匹配。
从图片中,我可以看到您正在呈现名为students.jade
的页面。对于该页面,您将变量title
发送给Jade,但您声明该变量将在Jade中被称为results
。
答案 1 :(得分:0)
您是否尝试删除第二个res.render
电话?
可能是被调用的那个而不是第一个,因为当执行到达第二个res.render
调用时,对DB的异步调用尚未完成。
答案 2 :(得分:-3)
db.all('SELECT * FROM students', function selectCb(err, rows, fields) {
if (err) {
db.close(); // <<<<<<<<<<<<<<
throw err;
}
for (var i in rows) {
console.log(rows[i]);
}
res.render('showResults.jade', {
results: rows
});
db.close(); // <<<<<<<<<<
});