在repl.it平台上使用express.js时,持续Sqlite损坏

时间:2018-08-21 12:51:14

标签: express sqlite repl.it

在repl.it平台上与express连接时,我经常会损坏Sqlite3数据库。我正在使用数据访问类->存储库模式

来自app.js的代码段:

const AppDAO = require('./data/dao');
...
const dao = new AppDAO('./db.sqliteMaptack');
const mapTierRepo = new MapTierRepository(dao);
mapTierRepo.createTable();

dao类:

const sqlite3 = require('sqlite3')  
const Promise = require('bluebird')

class AppDAO {  
  constructor(dbFilePath) {
    this.db = new sqlite3.Database(dbFilePath, (err) => {
      if (err) {
        console.log('Could not connect to database', err);
      } else {
        console.log('Connected to database');
      }
    })
  }

  run(sql, params = []) {
    return new Promise((resolve, reject) => {
      this.db.run(sql, params, function (err) {
        if (err) {
          console.log('Error running sql ' + sql);
          console.log(err);
          reject(err);
        } else {
          resolve({ id: this.lastID });
        }
      })
    })
  }

  get(sql, params = []) {
    return new Promise((resolve, reject) => {
      this.db.get(sql, params, (err, result) => {
        if (err) {
          console.log('Error running sql: ' + sql);
          console.log(err);
          reject(err);
        } else {
          resolve(result);
        }
      })
    })
  }

  all(sql, params = []) {
    return new Promise((resolve, reject) => {
      this.db.all(sql, params, (err, rows) => {
        if (err) {
          console.log('Error running sql: ' + sql);
          console.log(err);
          reject(err)
        } else {
          resolve(rows);
        }
      })
    })
  }

}

module.exports = AppDAO;

存储库:

class MapTierRepository {  
  constructor(dao) {
    this.dao = dao;
  }

  createTable() {
    const sql = 
    'CREATE TABLE IF NOT EXISTS MapTier (id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT)';
    return this.dao.run(sql);
  }

  create(name) {
    return this.dao.run(
      'INSERT INTO MapTier (name) VALUES (?)',
      [name]);
  }

  update(mapTier) {
    const { id, name } = mapTier
    return this.dao.run(
      'UPDATE MapTier SET name = ? WHERE id = ?',
      [name, id]
    );
  }

  delete(id) {
    return this.dao.run(
      'DELETE FROM MapTier WHERE id = ?',
      [id]
    );
  }

  getById(id) {
    return this.dao.get(
      'SELECT * FROM MapTier WHERE id = ?',
      [id]);
  }

  getAll() {
    return this.dao.all('SELECT * FROM MapTier');
  }
}
module.exports = MapTierRepository;

所有存储库方法均有效。但是,当repl.it实例崩溃时,可能会导致数据库损坏,有什么想法吗?

0 个答案:

没有答案