2016-11-19 5 views
0

(NodeJsを使用して)Sqilte DBからデータを取得しようとしています。 すべての行エントリをログに出力したい。 何らかの理由でエラーが発生していないが、結果が得られない。Nodejs&Sqlite - 各ステートメントが結果を返さない理由

私は、次のコードでDBを作成しています:

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

は、次の3つの事業の一つで、次のようなエラーオブジェクトを使用して、エラーを表示してくださいすることができ:

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つの方法は機能しません。 2番目の方法では、エラーが発生した場合に印刷を追加して、 'typeerror database object expected'と表示されます。 –

+0

私は謝罪し、私のawnserを編集してエラーソースについて詳しく知っています。 –

関連する問題