2014-07-03 79 views
3

我開始使用Node.js,我完全困惑,爲什麼我無法獲得我的SQL查詢結果在頁面上呈現,我使用sqlite3。 這是我index.js的一部分文件'無法讀取未定義'nodeJS的屬性'長度'

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' }); 
}); 

這是我的翡翠(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

你能幫我嗎,我真的很絕望。 (對不起,我的英語不好,我是法國人)^^

回答

6
res.render('students', { title: 'list' }); 

這行

each item, i in results 

變量名稱不匹配。

從圖片中,我可以看到您正在渲染名爲students.jade的頁面。對於該頁面,您將變量title發送給Jade,但您聲明該變量在Jade中將被稱爲results

-1

你有沒有試過去除第二個res.render電話?

它可能是被調用的而不是第一個,因爲當執行到第二個res.render調用時,對數據庫的異步調用還沒有完成。

-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(); // <<<<<<<<<< 
}); 
相關問題