、私は特急とsequelize ORM使用sequelize(ジャバスクリプトORM)(MySQLの)
を使用しています。しかし、私はモデルクラスを編集するときに、私の更新はありません気づきます私のデータベースに。例えば
、このarticle.js
という名前の記事モデル:
'use strict';
const SequelizeSlugify = require('sequelize-slugify');
module.exports = function (sequelize, DataTypes) {
let Article = sequelize.define('Article', {
title: {
type: DataTypes.STRING,
unique: true,
allowNull: false
},
url: {
type: DataTypes.STRING,
unique: true,
allowNull: false
},
description: {
type: DataTypes.STRING,
unique: true,
allowNull: false
},
slug: {
type: DataTypes.STRING,
unique: true,
allowNull: false
}
}, {
classMethods: {
associate: function (models) {
// Article.hasMany(models.Comments);
}
}
});
SequelizeSlugify.slugifyModel(Article, {
source: ['title'],
overwrite: false
});
return Article;
};
私は、このモデルでは、このようにフィールドを追加する場合:
testField: {
type: DataTypes.STRING,
unique: true,
allowNull: false
}
私はCMD npm start
でサーバーを再起動した場合でも、私の編集内容はデータベースに読み込まれたり登録されたりしません。 実際、私のデータテーブルを更新するには、それらを削除してノードサーバーを再起動する必要があります。
さらに、Sequelizeが私のモデルを登録する理由、たとえばarticle.js
を私のデータベースの記事のような複数の名前として知っておきたいと思います。どのようにこの動作から防止するには?
'use strict';
const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const config = require(__dirname+'/database.json');
const db = {};
let sequelize = new Sequelize(config.db.dbname, config.db.user, config.db.password, {
host: config.db.host,
port: config.db.port
});
fs.readdirSync(__dirname + '/models').filter(function (file) {
return (file.indexOf('.') !== 0);
}).forEach(function (file) {
let model = sequelize['import'](path.join(__dirname + '/models', file));
db[model.name] = model;
});
Object.keys(db).forEach(function (modelName) {
if ('associate' in db[modelName]) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;