gpt4 book ai didi

node.js - Node Sequelize 迁移/模型是否可以共享相同的代码?

转载 作者:搜寻专家 更新时间:2023-11-01 00:31:33 25 4
gpt4 key购买 nike

我是 Sequelize 的新手,所以请耐心等待。

我使用 Sequelize 启动了一个新项目和迁移,所以我得到了这样的:

migrations/20150210104840-create-my-user.js:

"use strict";
module.exports = {
up: function(migration, DataTypes, done) {
migration.createTable("MyUsers", {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: DataTypes.INTEGER
},
first_name: {
type: DataTypes.STRING
},
last_name: {
type: DataTypes.STRING
},
bio: {
type: DataTypes.TEXT
},
createdAt: {
allowNull: false,
type: DataTypes.DATE
},
updatedAt: {
allowNull: false,
type: DataTypes.DATE
}
}).done(done);
},
down: function(migration, DataTypes, done) {
migration.dropTable("MyUsers").done(done);
}
};

模型/myuser.js:

"use strict";
module.exports = function(sequelize, DataTypes) {
var MyUser = sequelize.define("MyUser", {
first_name: DataTypes.STRING,
last_name: DataTypes.STRING,
bio: DataTypes.TEXT
}, {
classMethods: {
associate: function(models) {
// associations can be defined here
}
}
});
return MyUser;
};

如你所见表定义在迁移和模型文件中。

想知道有没有办法分享代码?

我的意思是我不喜欢在两个文件中有逻辑如果字段发生变化,我必须更新两次。

更新

按照下面的Yan Foto示例另一种方式可能更清洁。

模式/用户

'use strict';

module.exports = {
name: 'users',
definition : function(DataTypes) {
return {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
firstname: {
type:DataTypes.STRING
},
lastname: {
type:DataTypes.STRING
},
email: {
type: DataTypes.STRING,
unique: true
},
username: {
type:DataTypes.STRING,
unique: true
}
};
}
};

模型/用户

'use strict';

var Schema = require('../schemas/users');

module.exports = function(sequelize, DataTypes) {
return sequelize.define(
Schema.name,
Schema.definition(DataTypes),
{
freezeTableName: true ,
instanceMethods: {
countTasks: function() {
// how to implement this method ?
}
}
}
);
};

migrations/20150720184716-users.js

'use strict';

var Schema = require('../schemas/users');

module.exports = {

up: function (queryInterface, Sequelize) {
return queryInterface.createTable(
Schema.name,
Schema.definition(Sequelize)
);
},

down: function (queryInterface, Sequelize) {
return queryInterface.dropTable(Schema.name);
}

};

最佳答案

当我开始使用 sequelize 时,我也想知道同样的事情,这是我的解决方案。我将我的模型定义如下:

module.exports = {
def: function(DataTypes) {
return {
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true
},
username: DataTypes.STRING,
password: DataTypes.STRING,
createdAt: DataTypes.DATE,
updatedAt: DataTypes.DATE,
}
},
config: {}
};

def 定义属性,config 是可选的options 对象,被define 接受。或 migration methods .我使用以下代码导入它们:

fs.readdirSync(__dirname + '/PATH/TO/models')
.filter(function(file) {
return (file.indexOf('.') !== 0) && (file !== basename);
})
.forEach(function(file) {
var name = file.substring(0, file.lastIndexOf(".")),
definition = require(path.join(__dirname + '/models', file));

sequelize['import'](name, function(sequelize, DataTypes) {
return sequelize.define(
name,
definition.def(DataTypes),
definition.config
);
});
});

对于迁移我有类似的方法:

const path = require('path');

module.exports = {
up: function (queryInterface, Sequelize) {
return queryInterface.createTable(
'users',
require(path.join(__dirname + '/PATH/TO/models', 'user.js')).def(Sequelize)
);
},

down: function (queryInterface, Sequelize) {
return queryInterface.dropTable('users');
}
};

关于node.js - Node Sequelize 迁移/模型是否可以共享相同的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31512039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com