2016-07-24 79 views
0

我想不出什麼時候關閉node-sqlite3中的數據庫,或者真的如何使用一般的軟件包。看來如果我運行這個,我會得到「沒有這樣的桌子:房間」。最終運行足夠多的時間後,我可能會設法制作桌子。節點sqlite3什麼時候關閉db

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

class RoomManager{ 
    constructor(options){ 

     this.db = this._createDb(); 
     this.table = "rooms"; 

     this._createTable(); 
     this.addRoom({ 
      name : 'test3' 
     }).getRooms() 
     this.deleteRoom({ 
      name : 'test3' 
     }).getRooms(); 

     return this; 
    } 

    _createDb() { 
     return new sqlite3.Database('chat'); 
    } 

    _createTable(){ 
     this.db.run("CREATE TABLE IF NOT EXISTS " + this.table + " (name TEXT, size INT)"); 
     return this; 
    } 

    addRoom(options){ 
     this.db.run("INSERT INTO " + this.table + " (name, size) VALUES ($name, $size)", { 
      $name : options.name, 
      $size : options.size || 1000 
     }); 
     return this; 
    } 

    getRooms(){ 
     this.db.all("SELECT rowid, name, size FROM " + this.table, function(err, rows) { 
      rows.forEach(function (row) { 
       console.log(row.rowid + ": " + row.name + " - " + row.size); 
      }); 
     }); 
     return this; 
    } 

    getRoom(options){ 
     if(options.name){ 
      this.db.get("SELECT * FROM " + this.table + " WHERE name = $name", { 
       $name : options.name 
      }, function(err, row){ 
       return row; 
      }); 
     } 
    } 

    deleteRoom(options){ 
     this.db.run("DELETE FROM " + this.table + " WHERE name = $name", { 
      $name : options.name 
     }); 
     return this; 
    } 
} 

module.exports = RoomManager; 
+0

如果你運行*什麼*?你還沒有顯示實際使用這個'RoomManager'類的代碼。 – mscdex

+0

只需'new RoomManager()'。作爲一個測試,構造函數創建一個表,添加行,獲取行,刪除行並重新獲取 – Tester232323

回答

1

您的問題,節點是異步的。所以,你必須等待回調函數的結束。例如

this.db.run(query, params, function(err) { 
    if (err) 
     return console.log(err); 

    // do next query here 
}) 

Sqlite模塊可以通過db.serialize控制流量。 Imho在普通情況下是無用的。更好地使用異步模塊或承諾它。

+0

謝謝,這是有道理的。但是,你的意思是沒用的?你的意思是什麼異步模塊? – Tester232323

+0

如果我想要查詢的順序,'sqlite.serialize'不舒服,例如插入新記錄,獲取它的身份證,做這個ID做。異步(https://github.com/caolan/async)是執行異步命令列表的流行模塊之一。 –

相關問題