Nodejs& Sqlite - 为什么每个语句都没有返回结果

时间:2016-11-19 10:39:37

标签: node.js sqlite

我正在尝试从Sqilte DB中检索数据(使用NodeJ)。 我想在每行输入日志中打印。 出于某种原因,我没有收到错误,但我也没有得到结果。

我正在使用以下代码创建数据库:

var sqlite3 = require('sqlite3').verbose();

  var db = new sqlite3.Database('usersDataBase');
  db.run("CREATE TABLE IF NOT EXISTS usersTable (id INTEGER PRIMARY KEY AUTOINCREMENT , userName TEXT, password TEXT)");  
  db.close();

并使用以下代码添加用户:

 var db = new sqlite3.Database('usersDataBase');         
         var stmt = db.prepare("INSERT INTO usersTable VALUES (null, ?, ?)", userName, passw);       
         stmt.finalize();    
         db.close();

最后,我正在尝试使用以下内容打印表格内容:

app.get("/view", function(req, res) {


    var db = new sqlite3.Database('usersDataBase');
    db.each("SELECT * FROM usersTable", function(err, row) {
        if (err) console.log('Error: ' + err);
        else console.log(row.userName + ": " + row.password)
       //db.close();
    });
    //db.close();

    // get to main screen
    console.log('Sending main.html')
    res.sendFile('main.html', {root: __dirname })
})

但我在屏幕上什么也没得到。 (没有错误信息,没有结果)

我做错了什么?

1 个答案:

答案 0 :(得分:0)

是否可以在以下三种操作之一中使用错误对象显示错误:

var db = new sqlite3.Database('usersDataBase');
db.each("SELECT * FROM usersTable", function(err, row) {
   if(err) console.error(err);
   else console.log(row.userName + ": " + row.password);
});

一些暗示可能超出主题: 您的查询集可能会变得非常复杂,因此我建议您使用 promise 模块,以获取承诺机制,这可能会为您节省后期时间,并使代码在变得复杂时更具可读性。
promise.denodeify 将节点回调样式函数转换为promise,(回调函数有错误和结果参数的方法(顺序很重要)):

var promise = require('promise');
var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database('usersDataBase');

var dbEach = promise.denodeify(db.each);

dbEach("SELECT * FROM usersTable")
    .then(onSelectFromUsersTableSuccess)
    .catch(onSelectFromUsersTableError);

function onSelectFromUsersTableSuccess(row) {
    // handle row
}

function onSelectFromUsersTableError(err) {
    // handle error
}