【发布时间】:2016-03-12 02:02:24
【问题描述】:
期望的结果
我想在我的节点 + koa + mysql 服务器启动时或前后检查数据库的状态,并在需要时应用更新脚本。
server.js 中的优化流程
- 设置 MySQL 连接
- 检查并更新数据库
- 如果更新脚本出现问题或更新过程中出现意外错误,则会导致崩溃和烧毁。
- 添加路线
- 启动服务器
我认为数据库的更新可以在 #1 之后的任何时候完成,但我还没有太成功。
我的工作主要基于来自 https://github.com/chrisveness/koa-sample-web-app-api-mysql 的示例代码,尽管它只关注 api 更简单。
代码 sn-ps
// schema/fate2.js
const versionModel = require('../models/version');
module.exports = function* updateToHead() {
yield versionModel.init();
try {
yield syncTrunkAndDev();
} catch (e) {
console.log("Latest trunk schema version is: " + versionModel.getTrunkLast());
console.log("Latest dev schema version is: " + versionModel.getDevLast());
throw "Error in upgrading", e;
}
}
// server.js
app.use(require('./schema/fate2'));
...
app.listen(process.env.PORT||3030);
// models/version.js
const Version = module.exports = {};
Version.init = function*() {
yield GLOBAL.db.query(
"CREATE TABLE IF NOT EXISTS version ( " +
" id int(11) NOT NULL," +
" dev int(1) NOT NULL," +
" description varchar(50) NOT NULL," +
" applied_on timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP," +
" dirty int(1) NOT NULL DEFAULT '1'," +
" PRIMARY KEY (id)" +
") ENGINE=InnoDB DEFAULT CHARSET=utf8"
);
};
其他 stackoverflow 帖子
How to perform initial setup in koa with rethinkdb - 我读过这个并尝试过,但它似乎没有做任何事情。
【问题讨论】: