Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在repl.it平台上使用express.js时,Sqlite不断损坏_Express_Sqlite_Repl.it - Fatal编程技术网

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

在repl.it平台上使用express.js时,Sqlite不断损坏,express,sqlite,repl.it,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 sql

在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实例崩溃时,很可能会导致数据库损坏,有什么想法吗?

您所说的损坏是什么意思?你知道你的东西崩溃的原因了吗?sqlite在试图打开文件时报告该文件已损坏。不是我的服务器崩溃了它的repl.it,它是主机。你能添加完整的url来上传你的sqlite数据库吗?也许是gz压缩的?