在repl.it平台上使用express.js时,Sqlite不断损坏
在repl.it平台上连接express时,我的Sqlite3数据库经常损坏。我使用的是数据访问类->存储库模式 app.js中的代码片段:在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
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压缩的?