sequelize-typescript icon indicating copy to clipboard operation
sequelize-typescript copied to clipboard

Error:Cannot read properties of undefined (reading 'prototype')

Open shin4488 opened this issue 3 years ago • 4 comments

Issue

when the models are added, the error Cannot read properties of undefined (reading 'prototype') happens.

Versions

  • sequelize:6.19.0
  • sequelize-typescript:2.1.3
  • typescript:

the below is the content of package.json

{
  "dependencies": {
    "nuxt": "^2.15.8",
    "pg": "^8.7.3",
    "pg-hstore": "^2.3.4",
    "reflect-metadata": "^0.1.13",
    "sequelize": "^6.19.0",
    "sequelize-typescript": "^2.1.3",
    "vue": "^2.6.14",
    "webpack": "^4.46.0"
  },
  "devDependencies": {
    "@nuxt/types": "^2.15.8",
    "@nuxt/typescript-build": "^2.1.0",
    "@types/node": "^17.0.24",
    "@types/validator": "^13.7.2",
    "sequelize-cli": "^6.4.1"
  }
}

Issue type

  • [x] bug report
  • [ ] feature request

Actual behavior

the error happens when sequelize.addModels() is executed. I attached the error message just after the related code.

Expected behavior

the error is not happened and models can be added.

Steps to reproduce

create companyMaster.ts like the code. import companyMaster.ts in index.ts . execute index.ts .

I referenced the link about how to add models.

Related code

commons/sequelize/models/companyMaster.ts

import { Table, Column, Model } from 'sequelize-typescript';

@Table({
  schema: 'public',
  tableName: 'company_master',
  underscored: true,
  timestamps: true,
})
export class CompanyMaster extends Model {
  @Column
  companyNumber!: string;

  @Column
  companyName!: string;

  @Column
  homepageUrl!: string;
}

index.ts

import { Sequelize } from 'sequelize-typescript';
import { CompanyMaster } from './commons/sequelize/models/companyMaster';

const sequelize = new Sequelize(process.env.DB_CONNECTION_URI || '', {
  models: [__dirname + '/commons/sequelize/models'], // (edited) here also the error happens.
});
sequelize.addModels([CompanyMaster]); // the error happens here

the error message for the line sequelize.addModels([CompanyMaster]);

Cannot read properties of undefined (reading 'prototype')

  at node_modules/sequelize-typescript/dist/sequelize/sequelize/sequelize.js:62:71
  at Array.map (<anonymous>)
  at Sequelize.defineModels (node_modules/sequelize-typescript/dist/sequelize/sequelize/sequelize.js:61:23)
  at Sequelize.addModels (node_modules/sequelize-typescript/dist/sequelize/sequelize/sequelize.js:37:36)
  at server/index.ts:30:15
  at runMicrotasks (<anonymous>)
  at processTicksAndRejections (node:internal/process/task_queues:96:5)

(edited) the error message for the line models: [__dirname + '/commons/sequelize/models'],

Cannot find module 'commons/sequelize/models/companyMaster'

Require stack:
  - node_modules/sequelize-typescript/dist/sequelize/sequelize/sequelize-service.js
  - node_modules/sequelize-typescript/dist/sequelize/sequelize/sequelize.js
  - node_modules/sequelize-typescript/dist/index.js
  - server/index.ts

  at Function.Module._resolveFilename (node:internal/modules/cjs/loader:933:15)
  at Function.Module._resolveFilename (node_modules/module-alias/index.js:49:29)
  at Function.Module._load (node:internal/modules/cjs/loader:778:27)
  at Module.require (node:internal/modules/cjs/loader:1005:19)
  at require (node:internal/modules/cjs/helpers:102:18)
  at node_modules/sequelize-typescript/dist/sequelize/sequelize/sequelize-service.js:45:32
  at Array.map (<anonymous>)
  at node_modules/sequelize-typescript/dist/sequelize/sequelize/sequelize-service.js:43:18
  at Array.reduce (<anonymous>)
  at getModels (node_modules/sequelize-typescript/dist/sequelize/sequelize/sequelize-service.js:35:20)
  at Sequelize.addModels (node_modules/sequelize-typescript/dist/sequelize/sequelize/sequelize.js:36:58)
  at new Sequelize (node_modules/sequelize-typescript/dist/sequelize/sequelize/sequelize.js:20:22)
  at server/index.ts:24:23
  at Layer.handle [as handle_request] (node_modules/express/lib/router/layer.js:95:5)
  at next (node_modules/express/lib/router/route.js:137:13)
  at Route.dispatch (node_modules/express/lib/router/route.js:112:3)

shin4488 avatar Apr 15 '22 06:04 shin4488

Did you ever figure this out? I have the exact same issue :(

p4nthera115 avatar Feb 13 '23 16:02 p4nthera115

Anyone got solution on this?

Jace-Tech avatar Apr 16 '23 23:04 Jace-Tech

i have same error, it worked fine when i had the models locally to the project but i get this error when trying to load them from a library

gutierrezj2 avatar Apr 26 '23 18:04 gutierrezj2

fwiw this is probably a problem bc you are using nuxt, which uses vite, which uses esbuild, which does not support typescripts emitDecoratorMetadata, which sequelize-typescript relies on.

tefkah avatar Sep 12 '23 11:09 tefkah