【问题标题】:How to use Sequelize in SailsJs如何在 SailsJs 中使用 Sequelize
【发布时间】:2015-08-27 20:44:24
【问题描述】:

Waterline 是一个出色的 ORM,但我注意到有许多功能尚未出现在 Waterline 上,但 Sequelize 已经具备。所以我决定切换到续集,但仍然使用 Sails 来处理其他事情。我有搜索教程如何切换到续集但没有。如何在 Sails Js 中替换 Waterline 以进行续集?

【问题讨论】:

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


【解决方案1】:

我也在推进sequelize,最近有两个项目真的出来了,所以我想宣布它们。

sails-hook-sequelize:

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

sails-hook-sequelize-blueprints

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

就是这样。

【讨论】:

  • 这是否也使用 sequelize 迁移?
  • Sequelize 迁移实际上可以使用 CLI,因此您可以在任何地方进行迁移,您只需要一个包含数据库连接的 config/config.json,生成迁移文件,添加一些列即可。
  • @FXCesinha,当我想使用多个连接时该怎么办。 stackoverflow.com/questions/36565379/…
  • 这个例子不能正常工作。您的“用户”模型返回错误:“ReferenceError:用户未定义”。
  • 我想补充一下这个出色的答案,如果您想在运行时为 db 用户解密并注入您的秘密(用户名和 pswd),则必须重新加载(重新初始化)钩子。如果您想同时连接到多个数据库(Sequelize 支持),您无法使用当前版本的钩子来做到这一点。幸运的是,我做了一个 PR 解决了这两个问题(它已经过测试并在生产中工作了几个月):github.com/festo/sails-hook-sequelize/pull/22
猜你喜欢
  • 2017-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-20
相关资源
最近更新 更多