'无法读取未定义'nodeJS的属性'长度'

时间:2014-07-03 10:12:06

标签: node.js express sqlite pug

我已经开始使用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

你能帮助我吗,我真的很绝望。 (抱歉我的英语不好我是法语)^^

3 个答案:

答案 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.close(),因为它在查询有机会完成之前关闭数据库连接。以下是修订后的代码:

 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();   // <<<<<<<<<<
});