类型错误:无法读取未定义的属性“belongsTo”

时间:2020-12-29 13:46:13

标签: node.js graphql sequelize.js

我正在尝试在 2 个模型“培训师和课程”之间建立多对多的关联,所以我做了第三个模型“CourseTrainer”来尝试 1 对多的关系。 但我收到此错误:

C:\Users\DELL\Downloads\graphql-12.18.2020\graphql-12.18.2020\graphql-12.18.2020\serverapp\database\database.js:54 db.trainer.belongsTo(db.tblCourseTrainer, { ^

TypeError: 无法读取未定义的属性“belongsTo” 在对象。 (C:\Users\DELL\Downloads\graphql-12.18.2020\graphql-12.18.2020\graphql-12.18.2020\serverapp\database\database.js:54:14) 在 Module._compile (internal/modules/cjs/loader.js:1063:30) 在 Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10) 在 Module.load (internal/modules/cjs/loader.js:928:32) 在 Function.Module._load (internal/modules/cjs/loader.js:769:14) 在 Module.require (internal/modules/cjs/loader.js:952:19) 在要求 (internal/modules/cjs/helpers.js:88:18) 在对象。 (C:\Users\DELL\Downloads\graphql-12.18.2020\graphql-12.18.2020\graphql-12.18.2020\serverapp\graphql\resolvers\user.js:6:12) 在 Module._compile (internal/modules/cjs/loader.js:1063:30) 在 Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)

数据库代码:

const Sequelize = require('sequelize');
const db = {};
const sequelize =  new Sequelize("firstDB"," "," ", {
  //from the DB amazom
  host: '  ',
    dialect: 'mysql',
    define: {
      timestamps: false,
      freezeTableName: true
    },
    operatorsAliases: false,
    pool: {
      max: 5,
      min: 0,
      acquire: 30000,
      idle: 10000
    },
  });

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

  
  db.tblUser = require("./models/user")(sequelize, Sequelize);
  db.vewStudentCourseTrainer = require("./models/studentCourseTrainer")(sequelize, Sequelize);
  db.tblTrainer = require("./models/trainer")(sequelize, Sequelize);
  db.tblCourse = require("./models/course")(sequelize,Sequelize);
  db.tblStudent = require("./models/student")(sequelize,Sequelize);
  db.tblCourseTrainer = require("./models/courseTrainer")(sequelize, Sequelize);
  db.tblStudentCourse = require("./models/studentCourse")(sequelize, Sequelize);

  db.tblCourseTrainer.hasMany(db.tblTrainer, { as: "trainer" });
  db.trainer.belongsTo(db.tblCourseTrainer, {
    foreignKey: "intTrainerID",
    as: "trainerID",
  });

  module.exports = db

CourseTrainer 的模型代码

module.exports = (sequelize,DataTypes)=>{
    const CourseTrainer  = sequelize.define("tblCourseTrainer",{
      intCourseTrainerID: {
        type: DataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: true,
      },             
      intCourseID: {
        type: DataTypes.INTEGER,
        foreignKey: true,
    },
    intTrainerID: {
        type: DataTypes.INTEGER,
        foreignKey: true,
    },
},)
    return CourseTrainer
  }

Trainer 的模型代码

module.exports = (sequelize,DataTypes)=>{
    const Trainer  = sequelize.define("tblTrainer",{
      intTrainerID: {
        type: DataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: true,
      },             
      strTrainerName: {
        type: DataTypes.STRING
    },
    
    },)
    return Trainer
  }

课程的模型代码


module.exports = (sequelize,DataTypes)=>{
    const Course  = sequelize.define("tblCourse",{
      intCourseID: {
        type: DataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: true,
      },             
      strCourseName: {
        type: DataTypes.STRING
    },
    },)
    return Course
  }

1 个答案:

答案 0 :(得分:0)

当你调用它时:

db.trainer.belongsTo(...)

.trainer 对象中没有 db 对象,因此 db.trainerundefined 并且您收到错误消息,告诉您您无法访问属性 {{ 1}} 在 .belongsTo() 值上。

我们可以看到您在此处声明 undefined 对象的位置:

db

然后,按照代码一直到您尝试执行 const db = {}; 的地方,但您没有在其中定义 db.trainer.belongsTo(...)。你有这个:

db.trainer

那么,也许您打算使用它?

db.tblTrainer = require("./models/trainer")(sequelize, Sequelize);