sequelize.import is not a function
Solution 1:
The error is caused by using the sequelize import object. Instead you should use Node's built in CommonJS require
function. So change this line in your models/index.js
:
const model = sequelize['import'](path.join(__dirname, file))
to:
const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes)
You can also just regenerate the models
directory and readd your models without the old index.js
if you find that easier:
mv models models.bak && sequelize init:models && mv models.bak/index.js models.bak/index.js.bak && mv models.bak/* models/ && rm models.bak
That one liner will fix your problem if you have sequelize-cli installed globally. If you don't you can use this one:
npm i --save-dev sequelize-cli && mv models models.bak && npx sequelize init:models && mv models.bak/index.js models.bak/index.js.bak && mv models.bak/* models/ && rm models.bak
You may also need to update your config folder. I use a JavaScript config to inject ENVs, so I had to add to change my const config = require(...
line to reflect that. If you used one of my one liners your old models/index.js
file is now at index.js.bak if you need to grab any custom stuff from it.
Solution 2:
As of now I was able to fix the issue by downgrading the sequelize module version in your package.json to "sequelize": "^5.22.3",
. do let me know if it is also fixed on your side.
Edit: any sequelize version under < 6.0.0
should work as normal
Solution 3:
This might help someone else out there, in version 6.6.5
it's deprecated and you should replace it with sequelize.define
.
Solution 4:
- Check that you do not have files in models directory that are not exporting anything.
- Check that your exports are functions with same parameters as the instance it is being called in the require statement.
In any case like mine, I had empty files in my models directory. require(...) is not a function simply because the index logic is iterating over and importing files that do not export anything from the models directory.