【问题标题】:Nodejs: Model Association in Postgresql with SequelizeNodejs:Postgresql 中的模型关联与 Sequelize
【发布时间】:2021-12-07 02:38:26
【问题描述】:

希望你做得很好。有这个问题在 Nodejs 中与 Sequelize Postgresql 进行关联。县有许多副县,副县有一个县。但我正面临这个问题:

throw new Error(`${source.name}.${_.lowerFirst(Type.name)} called with something that's not a subclass of Sequelize.Model`); ^

Error: Sousprefectures.hasOne called with something that 's not a subclass of Sequelize.Model
at Function. < anonymous > (C: \Users\ LENONO\ Desktop\ projetBangui\ node_modules\ sequelize\ dist\ lib\ associations\ mixin.js: 63: 13)
at Function.associate(C: \Users\ LENONO\ Desktop\ projetBangui\ models\ sousPrefecture.js: 22: 23)
at C: \Users\ LENONO\ Desktop\ projetBangui\ models\ index.js: 32: 19
at Array.forEach( < anonymous > )
at Object. < anonymous > (C: \Users\ LENONO\ Desktop\ projetBangui\ models\ index.js: 30: 17)

这是我与县相关的 SousPrefectures 模型。

const {  Model } = require('sequelize');

module.exports = (sequelize, DataTypes) => {
  class Sousprefectures extends Model {
   
    static associate(models) {
      // define association here
      Sousprefectures.belongsTo(models.Prefectures, {
        foreignKey: {
          name: "prefecture_id",
          allowNull: false }
      });

      
    }
  };
  Sousprefectures.init({
    _id: {
        type: DataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: true
    },
    nom: {
        type: DataTypes.STRING,
        allowNull: false
    },
  }, {
    sequelize,
    freezeTableName: true,
    modelName: 'Sousprefectures',
  });
  return Sousprefectures;
};

这是我的县模型

'use strict';
const {  Model } = require('sequelize');


module.exports = (sequelize, DataTypes) => {
  class Prefectures extends Model {
  
    

    static associate(models) {
      // define association here
      Prefectures.hasOne(models.SousPrefectures, {
        foreignKey: {
          name: "prefecture_id",
          allowNull: false }
      }); 
    }
  };
  Prefectures.init({
    _id: {
        type: DataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: true
    },
    nom: {
        type: DataTypes.STRING,
        allowNull: false
    },
  }, {
    sequelize,
    modelName: 'Prefectures',
  });
  return Prefectures;
};

这里是我的 Index js(由 Sequelize 生成)

'use strict';

const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};

let sequelize;
if (config.use_env_variable) {
  sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
  sequelize = new Sequelize(config.database, config.username, config.password, config);
}


fs
  .readdirSync(__dirname)
  .filter(file => {
    return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
  })
  .forEach(file => {
    const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes);
    db[model.name] = model;
  });


Object.keys(db).forEach(modelName => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;
 

我应该怎么做才能在另一个文件(例如:控制器)中访问我的模型?

【问题讨论】:

    标签: postgresql express model sequelize.js


    【解决方案1】:

    您将模型命名为 Sousprefectures,但将其命名为 SousPrefectures。更改您对它的称呼或名称。

    【讨论】:

    • 好的。即使我这样做,它也不起作用。请问这是导入模型的正确方法吗?
    • 是的,没错。检查db注册的型号名称并与Prefectures.hasOne(models.SousPrefectures比较
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多