Javascript 如何在feathersjs项目中使用sequelizejs创建外键

Javascript 如何在feathersjs项目中使用sequelizejs创建外键,javascript,node.js,sequelize.js,feathersjs,Javascript,Node.js,Sequelize.js,Feathersjs,我在sequelize v3.29.0中使用featherjs v2.0.3,我刚刚创建了三个模型,第三个与其他两个有关系 我使用feathers cli为每个生成服务,然后编辑每个的模型文件 到目前为止,很好,创建了表(使用PostgreSQL),创建了索引,FeatherJS很好地处理了CRUD,但还没有外键 因此,当我试图告诉feathersjs模型之间的关系时,我遇到了麻烦 当我将role\u permission.belongsTo(permissions)添加到role\u per

我在sequelize v3.29.0中使用featherjs v2.0.3,我刚刚创建了三个模型,第三个与其他两个有关系

我使用feathers cli为每个生成服务,然后编辑每个的模型文件

到目前为止,很好,创建了表(使用PostgreSQL),创建了索引,FeatherJS很好地处理了CRUD,但还没有外键

因此,当我试图告诉feathersjs模型之间的关系时,我遇到了麻烦

当我将
role\u permission.belongsTo(permissions)
添加到
role\u permission
模型时,我得到以下错误:
ReferenceError:未定义权限

正如我在Sequelize文档中看到的,这些模型是在同一个“文档”中定义的,因此我怀疑问题在哪里,但我不明白需要做什么

最后,这里是
权限
角色权限
的模型定义的相关部分:

// permission-model.js - A sequelize model

module.exports = function(sequelize) {
    const permission = sequelize.define('permissions', {
        permission_id: {
            type: Sequelize.UUID,
            defaultValue: Sequelize.UUIDV1,
            primaryKey: true,
            allowNull: false
        }...
    }, ...);

    permission.sync();

    return permission;
};

//role\u permission-model.js-续集模型
module.exports=函数(sequelize){
const role\u permission=sequelize.define('role\u permissions'{
许可证号码:{
类型:Sequelize.UUID,
allowNull:错误
}...
}, ...);

role_permission.belongsTo(permissions)//您需要导入权限模型。但它可能尚未定义,也可能尚未定义

我在github上的@mrpatiwi中发现了一种方法,可以确保在建立关联之前加载每个模型

首先,当需要定义关系时,添加一个名为associate的classMethod,它接受所有模型并设置关系

module.exports = function(sequelize) {
  const role_permission = sequelize.define('role_permisson', {
    ...
  }, {
    classMethods: {
      associate(models) {
        role_permission.belongsTo(models.permission);
      },
    },
  });

  // Don't add role_premission.sync() here

  return role_permission;
};
然后,在module.exports函数末尾的src/services/index.js中,添加:

// Setup relationships
const models = sequelize.models;
Object.keys(models)
  .map(name => models[name])
  .filter(model => model.associate)
  .forEach(model => model.associate(models));

sequalize.sync();

您需要导入权限模型。但它可能尚未定义,也可能尚未定义

我在github上的@mrpatiwi中发现了一种方法,可以确保在建立关联之前加载每个模型

首先,当需要定义关系时,添加一个名为associate的classMethod,它接受所有模型并设置关系

module.exports = function(sequelize) {
  const role_permission = sequelize.define('role_permisson', {
    ...
  }, {
    classMethods: {
      associate(models) {
        role_permission.belongsTo(models.permission);
      },
    },
  });

  // Don't add role_premission.sync() here

  return role_permission;
};
然后,在module.exports函数末尾的src/services/index.js中,添加:

// Setup relationships
const models = sequelize.models;
Object.keys(models)
  .map(name => models[name])
  .filter(model => model.associate)
  .forEach(model => model.associate(models));

sequalize.sync();

我也遇到了同样的问题,我只是通过改变这一点来解决它:

role_permission.belongsTo(permissions)
为此:

role_permission.belongsTo(models.permissions)

(我今天(2018年8月9日)使用Feathers CLI生成模型)

我遇到了同样的问题,只需更改以下内容即可解决:

role_permission.belongsTo(permissions)
为此:

role_permission.belongsTo(models.permissions)

(我今天使用Feathers CLI生成模型,2018年8月9日)

谢谢@sam desota!我已经找了一段时间了。有没有关于你刚才详细介绍的文档?非常有用。这会节省我很多时间。谢谢@sam desota!我找了一段时间了。有没有关于你所说内容的文档只是细节?非常有用。这会帮我节省很多时间。