-
-
Notifications
You must be signed in to change notification settings - Fork 4.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Class constructor Model cannot be invoked without 'new' and how getter v4 work? #7840
Comments
Please post the whole stack trace |
I had the same problem During debugging I found out that the Model constructor returns a class instead of a function I have a suspicion that the problem arises at the moment of inheritance |
In JavaScript, a class is a function. |
@felixfbecker nice joke, I'm very familiar with JS |
I have the same problem. |
I think it has something to do with the way babel transpiles the code. After I changed my
it works as expected. |
Yes, that is very likely. |
In {
"compilerOptions": {
"target": "es6", // <=
// ...
}
} |
I'm getting this as well. Just upgraded from 3 to
I started seeing the error anytime Sequelize attempted to create an instance of My
Switching to this for now:
|
Sr, i missed any notifications sequelize woking fine! |
It turns out that an ES6-class transpiled by babel can't extend a real ES6 class (The So The solution i used, was to use |
have almost the same problem how do i solve it ... looking for a solution |
do you found solution ? |
I'm getting this error as well when using some of the example code listed within Express / Sequelize setup. Seems the the offending line of code is within the cli's default generated
Altered things with babel and so forth, but haven't gotten it working just yet. |
Turns out in my case, I had a previously created model in the models folder that was causing things to break:
This was preventing the file from being read correctly by sequelize and causing the error listed in this thread. Advice for others: Make sure all of your code inside of your models folder is valid and from examples. |
For those running into this, this is a bug in |
Mine got solved via:
|
Im not using a transpiler and i have this error as well |
Same issue here and my .babelrc is:
Any other suggestions to solve this? |
Just in case it helps someone else: in my case the issue was that I was using |
For anyone having trouble with this using Jest and Expo (React Native), you may need to add sequelize to to the My
|
For anyone who comes to this and the reason was not transpiling. For me it was because I was exporting my models as classes, and the line from the generated models/index.js :
was causing the error. Once I changed that line to:
It was fixed |
Hi guys, I have the same issue with tsc (TypeScript compiler). tscconfig.json{
"compilerOptions": {
"target": "ES6",
"module": "CommonJS",
"moduleResolution": "node",
"lib": ["ES5", "ES6"],
"declaration": true,
"outDir": "./build",
"strict": true,
"esModuleInterop": true,
"allowJs": false,
"allowSyntheticDefaultImports": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"strictPropertyInitialization": false,
"sourceMap": true
},
"include": ["src"],
"exclude": ["node_modules"]
} version{
"sequelize": "^5.21.6",
"ts-node": "^8.10.1",
"typescript": "^3.7.2"
} modelimport { Model, DataTypes } from 'sequelize';
import sequelize from './';
import { OrderStatus } from '../components/constants';
class Order extends Model {
public id!: number;
public total!: number;
public finalTotal!: number;
public status: OrderStatus;
public start_date: Date;
public end_date: Date;
public created_at: Date;
public updated_at: Date;
}
Order.init({
id: {
type: DataTypes.UUID,
primaryKey: true,
defaultValue: DataTypes.UUIDV4
},
total: {
type: DataTypes.INTEGER,
allowNull: true,
},
finalTotal: {
type: DataTypes.INTEGER,
allowNull: true,
validate: {
len: {
args: [2, 5],
msg: 'Name must be from 2 to 5 characters in length'
},
}
},
status: {
type: DataTypes.ENUM(OrderStatus.InProcess, OrderStatus.Done)
},
}, {
sequelize,
tableName: 'orders',
})
export default Order; sequelize.importconst modelsPath = `${__dirname}/../src/models`;
const models = fs
.readdirSync(modelsPath)
.filter((filename: string) => /model.ts$/.test(filename))
.reduce((total: any, filename: string) => {
const model = sequelize.import(path.join(modelsPath, filename));
total[capitalize(model.name)] = model;
return total;
}, {});
// Sets up the associations for each model.
Object.keys(models).forEach((modelName: string) => {
if ('associate' in models[modelName]) {
models[modelName].associate(models);
}
}); errorTypeError: Class constructor Order cannot be invoked without 'new'
at Sequelize.import (node_modules/sequelize/lib/sequelize.js:486:38)
at /home/cuongw/Workspace/SaveMoney/service-template/test/utils.ts:18:37
at Array.reduce (<anonymous>)
at Object.exports.prepareModels (test/utils.ts:17:6)
at Object.exports.loadFixtures (test/utils.ts:35:18)
at Context.<anonymous> (test/order.test.ts:16:11)
at processImmediate (internal/timers.js:456:21) Please tell me a solution. Thank all. |
I had the same error with typescript and it was fixed when I updated the tsconfig.json changing the es5 for es6 "compilerOptions": { |
Thank for your reply. I used |
I resolved my issue. I used
|
Works for me! Thanks |
I am having the same issue, changed the appropriate line, still no luck. |
After much searching I found that this error does sometimes occur when the entity column type cannot be inferred. These are the only values that can automap: If you are using any other value, for example a UUID you need to set that in the column annotation Hope that helps anyone else going down this rabbit hole. |
Code is executed in nodeJS, so we can raise the target version. Also, this patch prevent the sequelize error below: `Class constructor Model cannot be invoked without 'new'` Solution: sequelize/sequelize#7840 (comment)
Hi all,
I using v4 to defined my model as:
and i import in others:
import {V2Category as category} from '../models/V2_category';
my query :
findCategoryById (id) { return category.findOne({ where: { 'id': id } }); }
When run i got an error:
However, i add
{ where: { 'id': id }, raw: true }
my code working but i can't use getter function fullName. Could you tell me where my mistake and how to fix it? ThanksThe text was updated successfully, but these errors were encountered: