Waterline是一款出色的ORM,但我发现它还没有Sequelize已经拥有的许多功能。因此,我决定切换到sequelize,但仍然使用Sails来完成其他事情。我搜索了一些教程,如何在Sails Js中切换到sequelize,但是没有找到。我该如何用sequelize替换Sails Js中的Waterline?
Waterline是一款出色的ORM,但我发现它还没有Sequelize已经拥有的许多功能。因此,我决定切换到sequelize,但仍然使用Sails来完成其他事情。我搜索了一些教程,如何在Sails Js中切换到sequelize,但是没有找到。我该如何用sequelize替换Sails Js中的Waterline?
我也开始使用sequelize了,最近有两个项目,我想宣布一下。
它遵循Manuel Darveau的答案,将获取所有模型,通过sequelize进行导入并将您的模型作为全局变量提供,您可以通过与migrate:'drop'
相同的方式强制sequelize同步。
sails-hook-sequelize-blueprints
Sails蓝图为我节省了大量时间,因此我编写了一个分支来与sequelize一起工作,它与原始蓝图的工作方式相同,您仍将拥有相同的蓝图配置,例如rest
,shortcuts
,prefix
等。由于waterline使用populateEach()函数填充模型,因此它使用include:[ { all: true } ]
,结果是相同的。
一个完整的例子:
$ npm install sails-hook-sequelize
$ npm install sails-hook-sequelize-blueprints
$ npm install sequelize
$ npm install pg pg-hstore
$ npm install continuation-local-storage
.sailsrc
"hooks": {
"blueprints": false,
"orm": false,
"pubsub": false
}
connections.js
somePostgresqlServer: {
user: 'postgres',
password: '',
database: 'database',
dialect: 'postgres',
options: {
dialect: 'postgres',
host : 'localhost',
port : 5432,
logging: true
}
}
您的模型定义
// user.js
module.exports = {
attributes: {
name: {
type: Sequelize.STRING,
allowNull: false
},
age: {
type: Sequelize.INTEGER
}
},
associations: function() {
user.hasMany(image, {
foreignKey: {
name: 'owner',
allowNull: false
}
});
},
options: {
tableName: 'user',
classMethods: {},
instanceMethods: {},
hooks: {}
}
};
就是这样。