如何在SailsJs中使用Sequelize

时间:2015-06-11 23:05:19

标签: node.js express sails.js sequelize.js waterline

Waterline是一个优秀的ORM,但我注意到有很多功能在水线上还没有,但Sequelize已经有了。所以我决定改用sequelize但仍然使用Sails来完成其他事情。我有搜索教程如何切换到续集但没有。如何在帆Js中替换Waterline for sequelize?

1 个答案:

答案 0 :(得分:14)

我已经推出了续集,最近有两个项目,所以我想宣布它们。

sails-hook-sequelize:

它遵循Manuel Darveau的答案,它将获取所有模型,通过sequelize导入并将模型作为全局变量提供,您可以使用migrate: 'drop'

的相同方式强制进行续集同步

sails-hook-sequelize-blueprints

Sails蓝图为我节省了很多时间,所以我写了一个与sequ​​elize一起使用的分支,它的工作方式与原始蓝图相同,而且你仍然拥有相同的蓝图配置,例如: restshortcutsprefix等等,因为水线使用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: {}
  }
};

那就是它。