如何在SailsJs中使用Sequelize

12

Waterline是一款出色的ORM,但我发现它还没有Sequelize已经拥有的许多功能。因此,我决定切换到sequelize,但仍然使用Sails来完成其他事情。我搜索了一些教程,如何在Sails Js中切换到sequelize,但是没有找到。我该如何用sequelize替换Sails Js中的Waterline?


请查看Manuel Darveau在https://groups.google.com/d/msg/sailsjs/ALMxbKfnCIo/H2RcRUnnFGEJ发布的帖子。 - Dário
1个回答

16

我也开始使用sequelize了,最近有两个项目,我想宣布一下。

sails-hook-sequelize:

它遵循Manuel Darveau的答案,将获取所有模型,通过sequelize进行导入并将您的模型作为全局变量提供,您可以通过与migrate:'drop'相同的方式强制sequelize同步。

sails-hook-sequelize-blueprints

Sails蓝图为我节省了大量时间,因此我编写了一个分支来与sequelize一起工作,它与原始蓝图的工作方式相同,您仍将拥有相同的蓝图配置,例如restshortcutsprefix等。由于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: {}
  }
};

就是这样。


1
这个也使用 Sequelize 迁移吗? - nahtnam
Sequelize迁移实际上与CLI一起工作,因此您可以在任何地方进行迁移,您只需要一个包含数据库连接的config/config.json文件,生成迁移文件,添加一些列即可完成。 - FXCesinha
@FXCesinha,当我想要使用多个连接时该怎么办?http://stackoverflow.com/questions/36565379/use-multiple-datastore-connections-with-sequelize?noredirect=1#comment60735265_36565379 - Milkncookiez
这个例子不能正常工作。你的“User”模型返回一个错误:“ReferenceError: user未定义”。 - alvaropaco
@alvaropaco请查看示例应用程序https://github.com/cesardeazevedo/sails-hook-sequelize-blueprints/tree/master/test/fixtures/sampleapp - FXCesinha
1
我想补充一下这个优秀的答案,如果您想在运行时解密并注入您的机密信息(用户名和密码)到数据库用户中,您需要重新加载(重新初始化)钩子。如果您想同时连接到多个DB(由Sequelize支持),您不能使用当前版本的hook来实现。幸运的是,我制作了一个PR来解决这两个问题(它已经在生产环境中测试并运行多个月):https://github.com/festo/sails-hook-sequelize/pull/22 - Milkncookiez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接