javascript - Node sqlite3何时关闭数据库

标签 javascript node.js sqlite

我不知道何时关闭node-sqlite3中的数据库,或者实际上如何使用该包。似乎如果我运行这个,我会得到“没有这样的表:房间”。最终,在运行足够多次后,我可能会设法制作表格。

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;

最佳答案

你的问题是 Node 是异步的。因此,您必须通过回调函数等待命令结束。例如

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

   // do next query here
})

Sqlite模块可以通过db.serialize来控制流量。恕我直言,在常见情况下它没有用。最好使用异步模块或 promise 。

关于javascript - Node sqlite3何时关闭数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38554397/

相关文章:

javascript - 同一页面上的多个 Twitter Bootstrap Popover 仅显示第一个内容

javascript - HTML/CSS/Javascript - 将鼠标悬停在不同的单元格上时更改一个表格单元格的值

Javascript:条件函数onClick按钮

javascript - 如何限制用户访问 ExpressJS/NodeJS 中的静态 html 文件?

javascript - Node 错误 "Cannot read property ' insertId' 未定义”

java - (Android) Java 从 SQLDatabase 获取值

android - 如何使用 Loader 更新单个 TextView

javascript - 为什么单击的表格单元格内的按钮未定义

node.js - nodejs可以生成SSL证书吗?

ubuntu - Heroku 错误与 rake db :pull - ! Taps Load Error: cannot load such file -- sqlite3