question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Question: TypeError: Class constructor Model cannot be invoked without 'new'

See original GitHub issue

Asked it here: https://stackoverflow.com/questions/50272405/sequelize-typescript-typeerror-class-constructor-model-cannot-be-invoked-withou

Repo to reproduce here: https://github.com/avidanyum/test-node-sequelize (see below exact steps).

I’m using sequelize-typescript when I run a sample mocha test to check it I get:

TypeError: Class constructor Model cannot be invoked without 'new'

I saw some related questions over the net but I am using latest transpiler to javascript from typescript see:

backend/tsconfig.json:

"target": "es2017",
    "lib": [
      "es2017",

The relevant code is:

backend/src/test/ts/transaction.async.mocha.test.ts:

@Table
export class User extends Model<User> {

  @Column({primaryKey: true})
  id: string;

  @Column
  name: string;
}

async function asyncSaveAndFindTest(): Promise<User[]> {
  return await new User({ name: 'someName' }).save().then(res => User.findAll());
}

Here is how to reproduce the problem:

➜  tmp git clone https://github.com/avidanyum/test-node-sequelize
Cloning into 'test-node-sequelize'...
remote: Counting objects: 23, done.
remote: Compressing objects: 100% (17/17), done.
remote: Total 23 (delta 2), reused 23 (delta 2), pack-reused 0
Unpacking objects: 100% (23/23), done.
➜  tmp cd test-node-sequelize
➜  test-node-sequelize git:(master) npm install

> sqlite3@4.0.0 install /Users/myuser/tmp/test-node-sequelize/node_modules/sqlite3
> node-pre-gyp install --fallback-to-build

[sqlite3] Success: "/Users/myuser/tmp/test-node-sequelize/node_modules/sqlite3/lib/binding/node-v57-darwin-x64/node_sqlite3.node" is installed via remote
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN codelyzer@4.2.1 requires a peer of @angular/compiler@>=2.3.1 <7.0.0 || >6.0.0-beta <7.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN codelyzer@4.2.1 requires a peer of @angular/core@>=2.3.1 <7.0.0 || >6.0.0-beta <7.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN codelyzer@4.2.1 requires a peer of @angular/platform-browser-dynamic@>=2.3.1 <7.0.0 || >6.0.0-beta <7.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN codelyzer@4.2.1 requires a peer of @angular/platform-browser@>=2.3.1 <7.0.0 || >6.0.0-beta <7.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN codelyzer@4.2.1 requires a peer of @angular/common@>=2.3.1 <7.0.0 || >6.0.0-beta <7.0.0 but none is installed. You must install peer dependencies yourself.

added 649 packages in 21.194s
➜  test-node-sequelize git:(master) npm run-script test-mocha

> test-nodejs-sequelize@0.0.0 test-mocha /Users/myuser/tmp/test-node-sequelize
> mocha --require ts-node/register ./backend/src/test/ts/**/*.mocha.test.ts

sequelize deprecated String based operators are now deprecated. Please use Symbol based operators for better security, read more at http://docs.sequelizejs.com/manual/tutorial/querying.html#operators node_modules/sequelize/lib/sequelize.js:242:13


  DB Model Test
Executing (default): SELECT 1+1 AS result
Executing (default): CREATE TABLE IF NOT EXISTS `User` (`id` VARCHAR(255) PRIMARY KEY, `name` VARCHAR(255));
Executing (default): PRAGMA INDEX_LIST(`User`)
Executing (default): PRAGMA INDEX_INFO(`sqlite_autoindex_User_1`)
Executing (default): CREATE TABLE IF NOT EXISTS `User` (`id` VARCHAR(255) PRIMARY KEY, `name` VARCHAR(255));
Executing (default): PRAGMA INDEX_LIST(`User`)
Executing (default): PRAGMA INDEX_INFO(`sqlite_autoindex_User_1`)
Executing (2d1b9e42-32c2-4103-8f1d-17ad02279bd3): BEGIN DEFERRED TRANSACTION;
before add user 1
Executing (2d1b9e42-32c2-4103-8f1d-17ad02279bd3): ROLLBACK;
    1) should automatically pass transaction


  0 passing (36ms)
  1 failing

  1) DB Model Test
       should automatically pass transaction:
     TypeError: Class constructor Model cannot be invoked without 'new'
      at new User (backend/src/test/ts/transaction.async.mocha.test.ts:73:42)
      at /Users/myuser/tmp/test-node-sequelize/backend/src/test/ts/transaction.async.mocha.test.ts:50:20
      at step (backend/src/test/ts/transaction.async.mocha.test.ts:51:23)
      at Object.next (backend/src/test/ts/transaction.async.mocha.test.ts:32:53)
      at /Users/myuser/tmp/test-node-sequelize/backend/src/test/ts/transaction.async.mocha.test.ts:26:71
      at Promise (<anonymous>)
      at __awaiter (backend/src/test/ts/transaction.async.mocha.test.ts:22:12)
      at asyncSaveAndFindTest (backend/src/test/ts/transaction.async.mocha.test.ts:98:20)
      at Object.<anonymous> (backend/src/test/ts/transaction.async.mocha.test.ts:39:13)
      at step (backend/src/test/ts/transaction.async.mocha.test.ts:51:23)
      at Object.next (backend/src/test/ts/transaction.async.mocha.test.ts:32:53)
      at /Users/myuser/tmp/test-node-sequelize/backend/src/test/ts/transaction.async.mocha.test.ts:26:71
      at Promise (<anonymous>)
      at __awaiter (backend/src/test/ts/transaction.async.mocha.test.ts:22:12)
      at /Users/myuser/tmp/test-node-sequelize/backend/src/test/ts/transaction.async.mocha.test.ts:37:37
      at transaction.prepareEnvironment.then (node_modules/sequelize/lib/sequelize.js:998:21)
      at clsBind (node_modules/cls-hooked/context.js:172:17)
      at tryCatcher (node_modules/bluebird/js/release/util.js:16:23)
      at Promise._settlePromiseFromHandler (node_modules/bluebird/js/release/promise.js:512:31)
      at Promise._settlePromise (node_modules/bluebird/js/release/promise.js:569:18)
      at Promise._settlePromise0 (node_modules/bluebird/js/release/promise.js:614:10)
      at Promise._settlePromises (node_modules/bluebird/js/release/promise.js:693:18)
      at Async._drainQueue (node_modules/bluebird/js/release/async.js:133:16)
      at Async._drainQueues (node_modules/bluebird/js/release/async.js:143:10)
      at Immediate.Async.drainQueues [as _onImmediate] (node_modules/bluebird/js/release/async.js:17:14)



npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! test-nodejs-sequelize@0.0.0 test-mocha: `mocha --require ts-node/register ./backend/src/test/ts/**/*.mocha.test.ts`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the test-nodejs-sequelize@0.0.0 test-mocha script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/myuser/.npm/_logs/2018-05-10T11_45_46_773Z-debug.log

Issue Analytics

  • State:closed
  • Created 5 years ago
  • Comments:7

github_iconTop GitHub Comments

3reactions
damianbcommented, May 10, 2018

Try changing the target to ES2017 in your tsconfig.

0reactions
alexplscommented, Apr 23, 2019

@rochapablo looks like someone is having the same issue as you here: https://github.com/typestack/class-transformer/issues/242

Read more comments on GitHub >

github_iconTop Results From Across the Web

TypeError: Class constructor model cannot be invoked without ...
The problem is ES6 classes => are not transpilled with there full features to ES5! Sequelize is relying on some features.
Read more >
Class constructor Model cannot be invoked without 'new' and ...
Hi all, I using v4 to defined my model as: @Options({ sequelize, tableName: 'V2_category', timestamps: false }) @Attributes({ id: { type: ...
Read more >
Class constructor cannot be invoked without 'new' in JS
Creates a new object that inherits the prototype of the class. · Calls the constructor function with the provided parameters and binds the...
Read more >
Javascript ES6 TypeError Class constructor Client cannot be ...
When I try to execute nodemon command I always see this error TypeError: Class constructor Client cannot be invoked without 'new'.
Read more >
Class constructor Sequelize cannot be invoked without 'new'
(Note: Only Treehouse students can comment or ask questions, but non-students are welcome to browse our conversations.) Looking to learn ...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found