node.js - Sequelize PostgresQL - 列不存在时

标签 node.js angularjs postgresql sequelize.js

我不明白为什么我的 api 调用此列而不是 courseSection.courseId。来自 postman
enter image description here
我正在使用 AngularJs、PostgresSQL、NodeJs 和 Sequelize ORM 构建我的项目。
这是我的 course.contorller.js 的一部分:

const db = require("../models");
const Course = db.course;
    
//view course catalogue 
exports.retrieveAll = (req, res) => {
    Course.findAll({
          include: [{
            model: db.courseSection,
            as: "courseSection"
          }, {
            model: db.category,
            as: "category"
          }]
        })
        .then(data => {
          res.send(data);
        })
        .catch(err => {
          res.status(500).send({
            message: err.message
          });
        }); };
这是我的 course.model.js
      module.exports = (sequelize, Sequelize) => {
          const Course = sequelize.define(
            "course",
            {
              courseId: {
                type: Sequelize.INTEGER,
                autoIncrement: true,
                primaryKey: true,
              },
              name: {
                type: Sequelize.STRING,
                allowNull: false,
                validate: {
                  notEmpty: true,
                },
              },
              description: {
                type: Sequelize.STRING,
              },
              creditPrice: {
                type: Sequelize.INTEGER,
              },
              isArchived: {
                type: Sequelize.BOOLEAN,
                defaultValue: false,
              },
              isDraft: {
                type: Sequelize.BOOLEAN,
              },
              level: {
                type: Sequelize.ENUM({
                  values: [
                    "PRIMARY 1",
                    "PRIMARY 2",
                    "PRIMARY 3",
                    "PRIMARY 4",
                    "PRIMARY 5",
                    "PRIMARY 6",
                  ],
                }),
              },
              createdAt: {
                type: Sequelize.DATE,
              },
              updatedAt: {
                type: Sequelize.DATE,
              },
            },
            {
              classMethods: {
                associate: function (models) {
                  Course.hasMany(models.CourseSection, {
                    foreignKey: "courseId",
                    onDelete: "CASCADE",
                  });
                  Course.hasMany(models.Material, {
                    foreignKey: "courseId",
                    onDelete: "CASCADE",
                  });
                  Course.hasMany(models.Review, {
                    foreignKey: "courseId",
                    onDelete: "CASCADE",
                  });
                  Course.hasMany(models.Enrolment, {
                    foreignKey: "courseId",
                    onDelete: "CASCADE",
                  });
                  Course.belongsTo(models.Category, {
                    foreignKey: "categoryId",
                    onDelete: "CASCADE",
                  });
                  Course.belongsTo(models.User, {
                    foreignKey: "userId",
                    onDelete: "CASCADE",
                  });
                },
              },
            }
          );
        
          return Course;
        };
我的 courseSection.js
    module.exports = (sequelize, Sequelize) => {
      const CourseSection = sequelize.define(
        "courseSection",
        {
          sectionId: {
            type: Sequelize.INTEGER,
            autoIncrement: true,
            primaryKey: true,
          },
          name: {
            type: Sequelize.STRING,
            allowNull: false,
            validate: {
              notEmpty: true,
            },
          },
          isArchived: {
            type: Sequelize.BOOLEAN,
            defaultValue: false,
          },
          createdAt: {
            type: Sequelize.DATE,
          },
          updatedAt: {
            type: Sequelize.DATE,
          },
        },
        {
          classMethods: {
            associate: function (models) {
              CourseSection.belongsTo(models.Course, {
                foreignKey: "courseId",
                onDelete: "CASCADE",
              });
            },
          },
        }
      );
    
      return CourseSection;
    };
我对 course.js 的 迁移
    "use strict";
    
    //npx sequelize migration:generate --name course
    module.exports = {
      up: async (queryInterface, Sequelize) => {
        return queryInterface.createTable("course", {
          courseId: {
            allowNull: false,
            type: Sequelize.INTEGER,
            autoIncrement: true,
            primaryKey: true,
          },
          categoryId: {
            type: Sequelize.INTEGER,
            onDelete: "CASCADE",
            references: {
              model: "category",
              key: "categoryId",
            },
          },
          userId: {
            type: Sequelize.INTEGER,
            onDelete: "CASCADE",
            references: {
              model: "user",
              key: "userId",
            },
          },
          name: {
            type: Sequelize.STRING,
            allowNull: false,
            validate: {
              notEmpty: true,
            },
          },
          description: {
            type: Sequelize.STRING,
          },
          creditPrice: {
            type: Sequelize.INTEGER,
          },
          isArchived: {
            type: Sequelize.BOOLEAN,
            defaultValue: false,
          },
          isDraft: {
            type: Sequelize.BOOLEAN,
          },
          level: {
            type: Sequelize.ENUM({
              values: [
                "PRIMARY 1",
                "PRIMARY 2",
                "PRIMARY 3",
                "PRIMARY 4",
                "PRIMARY 5",
                "PRIMARY 6",
              ],
            }),
          },
          createdAt: {
            type: Sequelize.DATE,
          },
          updatedAt: {
            type: Sequelize.DATE,
          },
        });
      },
    
      down: async (queryInterface, Sequelize) => {
        return queryInterface.dropTable("course");
      },
    };
我的 迁移类(class)部分
    "use strict";
    
    module.exports = {
      up: async (queryInterface, Sequelize) => {
        return queryInterface.createTable("courseSection", {
          sectionId: {
            type: Sequelize.INTEGER,
            autoIncrement: true,
            primaryKey: true,
          },
          name: {
            type: Sequelize.STRING,
            allowNull: false,
            validate: {
              notEmpty: true,
            },
          },
          courseId: {
            type: Sequelize.INTEGER,
            onDelete: "CASCADE",
            references: {
              model: "course",
              key: "courseId",
            },
          },
          isArchived: {
            type: Sequelize.BOOLEAN,
            defaultValue: false,
          },
          createdAt: {
            type: Sequelize.DATE,
          },
          updatedAt: {
            type: Sequelize.DATE,
          },
        });
      },
    
      down: async (queryInterface, Sequelize) => {
        return queryInterface.dropTable("courseSection");
      },
    };
我的 index.js 在/model
enter image description here
我的 postgres 表:
enter image description here
当我执行 localhost:3000/courses/course 时,我的 vscode 显示以下错误:

Executing (default): SELECT "course"."courseId", "course"."name", "course"."description", "course"."creditPrice", "course"."isArchived", "course"."isDraft", "course"."level", "course"."createdAt", "course"."updatedAt", "course"."categoryCategoryId", "course"."categoryId", "course"."userId", "course"."userUserId", "courseSection"."sectionId" AS "courseSection.sectionId", "courseSection"."name" AS "courseSection.name", "courseSection"."isArchived" AS "courseSection.isArchived", "courseSection"."createdAt" AS "courseSection.createdAt", "courseSection"."updatedAt" AS "courseSection.updatedAt", "courseSection"."courseCourseId" AS "courseSection.courseCourseId", "courseSection"."courseId" AS "courseSection.courseId", "category"."categoryId" AS "category.categoryId", "category"."isArchived" AS "category.isArchived", "category"."name" AS "category.name", "category"."createdAt" AS "category.createdAt", "category"."updatedAt" AS "category.updatedAt" FROM "course" AS "course" LEFT OUTER JOIN "courseSection" AS "courseSection" ON "course"."courseId" = "courseSection"."courseCourseId" LEFT OUTER JOIN "category" AS "category" ON "course"."categoryId" = "category"."categoryId";


过去 2 天我一直在解决这个问题,老实说我不知道​​我哪里出错了。我希望任何人都可以帮助我。

最佳答案

您定义了 courseSectioncourse 之间的关联两次:

  • 模型类的 associate 方法(正确的)
  • 中的
  • 不指示 index.js 选项

  • 我想您只需要删除 foreignKey 中的关联,然后在 index.js 中调用模型的 associate 方法。
    就像是
    db.category.associate(db.models);
    // and so on
    

    关于node.js - Sequelize PostgresQL - 列不存在时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66398467/

    相关文章:

    node.js - 获取区域 EC2 部署到使用 Node

    javascript - 为什么 3 在 AngularJS 中等于?有什么具体原因吗?

    javascript - 如何在 ionic 应用程序中显示整页图像

    javascript - Ui.Router使用lazyLoad导入JS文件,但按钮失去功能

    ruby-on-rails - 多个 worker 的 Rails DB Performance

    sql - 在 Postgres 中将整数类型更改为枚举

    使用默认值的 SQL 条件连接

    node.js - 在 Node.js/NPM 中存档或备份 node_modules 文件夹的最佳方式

    javascript - app.js 文件中出现错误,我无法破解

    node.js - 使用 node.js 和 MongoDB 对 Web 应用程序进行 Docker 化时的代码 14