【问题标题】:"TypeError: Cannot read property 'hasMany' of undefined" in TypeScript\"TypeError: Cannot read property \'hasMany\' of undefined\" in TypeScript
【发布时间】:2023-01-19 01:10:01
【问题描述】:

我做了很多表,想在它们之间建立关系。当我调用 sequelize(orm) 的内置函数,即 .hasMany 时,它给了我错误

无法读取 .hasMany 的未定义属性

文件公司模型.js

const sequelize = require("sequelize");
const companyDb = require("../../config/database");

const company1 = companyDb.define("company", {
  id: {
    type: sequelize.INTEGER,
    autoIncrement: true,
    primaryKey: true,
  },
  name: {
    type: sequelize.STRING,
    allowNull: false,
  },
  address: {
    type: sequelize.STRING,
    allowNull: false,
  },
  contact: {
    type: sequelize.STRING,
  },
  primay_email: {
    type: sequelize.STRING,
    allowNull: false,
  },
  website: {
    type: sequelize.STRING,
  },
  deleted_at: {
    type: sequelize.DATE,
  },
  is_deleted: {
    type: sequelize.BOOLEAN,
    defaultValue: false,
  },
  logo_url: {
    type: sequelize.STRING,
  },
  country: {
    type: sequelize.STRING,
    allowNull: false,
  },
});

module.exports = company1;

我在下面建立关系:

文件关系.js

const user = require("./usermodal");

const customerCompany = require("./customerCompanyModel");
const customer = require("./customerModel");
const invoiceItems = require("./invoiceItemsModel");
const outlet = require("./outletModel");
const outletStock = require("./outletStockModel");
const product = require("./productModel");
const role = require("./roleModel");
const invoice = require("./invoicesModel");
const { use } = require("../../routes");
const {company} = require("./companyModel");

const relationshipt   = company.hasMany(user);
user.belongsTo(company);
role.hasOne(user);
user.belongsTo(role);

company.hasMany(product);
product.belongsTo(company);

company.hasMany(outlet);
outlet.belongsTo(company);

company.hasMany(customerCompany);
customerCompany.belongsTo(company);

outlet.hasMany(user);
user.belongsTo(outlet);

outlet.hasMany(customerCompany);
customerCompany.belongsTo(outlet);

outlet.hasMany(invoice);
invoice.belongsTo(outlet);

outlet.hasMany(outletStock);
outletStock.belongsTo(outlet);

product.hasMany(outletStock);
outletStock.belongsTo(product);

product.hasOne(invoiceItems);
invoiceItems.belongsTo(product);

customer.hasMany(customerCompany);
customerCompany.belongsTo(customer);

customer.hasMany(invoice);
invoice.belongsTo(customer);

invoice.hasMany(invoiceItems);
invoiceItems.belongsTo(invoice)

module.exports = relations;

但它给了我这个错误:

我该如何解决这个问题?

【问题讨论】:

  • 所以 company 是未定义的。 company 从模型中导出到哪里?你可能想要const company = require("./companyModel");
  • 你能分享一下如何在 typescript sequelize 中建立关系的例子吗? @epascarello
  • 请查阅Why not upload images of code/errors when asking a question?(例如。,“图像应该只用于说明问题 不能用任何其他方式说清楚, 例如提供用户界面的屏幕截图。”) 和do the right thing。提前致谢。

标签: javascript node.js typescript sequelize.js


【解决方案1】:

我认为这就是解决问题的方法。现在:

const {company} = require("./companyModel");

应该是(注意删除的花括号):

const company = require("./companyModel");

下面的代码只是为了解释会发生什么;不要尝试使用它!

因此,在您的./companyModel 中,您将模型导出为整个exports 对象:

module.exports = company1;

后来你用大括号把它包括在内,大致翻译成这样:

const {company} = company1;
// Or to put it differently:
const company = company1.company; // And this is the undefined value you get

使用正确的 require 语句,它看起来像这样:

const company = company1; // That's your model; no more undefined

【讨论】:

    猜你喜欢
    • 2019-02-12
    • 2021-09-20
    • 2021-06-08
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多