77 lines
2.0 KiB
JavaScript
77 lines
2.0 KiB
JavaScript
/**
|
|
* mysql/sequelize
|
|
*
|
|
* 参考文档:
|
|
* https://sequelize.org/
|
|
* https://sequelize.org/api/v6/identifiers
|
|
* https://www.sequelize.com.cn/
|
|
*/
|
|
const config = require("./config")
|
|
const Sequelize = require("sequelize");
|
|
const operatorsAliases = require("./operatorsAliases");
|
|
const Api = require("./api");
|
|
module.exports = async (app) => {
|
|
const {database, username, password, options,} = config
|
|
const sequelize = new Sequelize(database, username, password, {
|
|
...options,
|
|
operatorsAliases,
|
|
});
|
|
|
|
// 加载model文件
|
|
let list = await app.load(config.path)
|
|
list.forEach(item => {
|
|
const {res, parse} = item
|
|
const model = {}
|
|
for (let key of Object.keys(res.model)) {
|
|
res.model[key].type = Sequelize[res.model[key].type]
|
|
model[key] = res.model[key]
|
|
}
|
|
model['id'] = {
|
|
type: Sequelize.INTEGER,
|
|
comment: '表自增id',
|
|
allowNull: false,
|
|
unique: 'id',
|
|
primaryKey: true,
|
|
autoIncrement: true,
|
|
}
|
|
sequelize.define(parse.name, model)
|
|
})
|
|
|
|
|
|
app.models = sequelize.models
|
|
const api = new Api(sequelize, sequelize.models)
|
|
app.db = api
|
|
// console.log(api);
|
|
console.log(await app.db.table("User").find());
|
|
|
|
//等待所有插件载入完成后,自动更新数据库字段
|
|
//把所有模型的md5值存入到redis里面去,哪个文件的md5有变动就更新哪个表的字段.
|
|
app.willReadyList.push(async () => {
|
|
list.forEach(async item => {
|
|
const {res, parse} = item
|
|
const md5 = await app.redis.get("md5:" + parse.name)
|
|
const newMd5 = getFileMd5(app.root + '/' + parse.dir + "/" + parse.base)
|
|
if (!md5 || newMd5 !== md5) {
|
|
//自动更新表字段
|
|
await app.models[parse.name].sync({alter: true});
|
|
console.log("自动更新表:", parse.name);
|
|
//创建新的md5
|
|
await app.redis.mset("md5:" + parse.name, newMd5)
|
|
}
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
//文件md5值
|
|
function getFileMd5(url) {
|
|
const buffer = require('fs').readFileSync(url);
|
|
const hash = require('crypto').createHash('md5');
|
|
hash.update(buffer, 'utf8');
|
|
const md5 = hash.digest('hex');
|
|
return md5
|
|
}
|