2016-11-19 3 views
0

Я пытаюсь получить данные из Sqilte DB (используя NodeJs). Я хочу напечатать в журнале каждую запись строки. По какой-то причине я не получаю ошибок, но я тоже не получаю результатов.Nodejs & Sqlite - Почему каждое утверждение не возвращает результатов

Я создаю БД в следующем коде:

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

Если db.Close() будет последним линия. Разве это не закрывает его до вызова обратных вызовов? –

ответ

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.denodeify преобразование функции узла стиля обратного вызова в обещание, (методы которых обратные вызовы имеют ERR и приводят аргументы (порядок важен)):

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 
} 
+0

2 способа не работают. Во втором случае я добавляю печать в случае ошибки, и я получаю: «объект базы данных типаerror ожидается» –

+0

Прошу прощения, я отредактировал мой тент, чтобы получить больше информации об источнике ошибки. –

Смежные вопросы