问题
I've been receiving this sequelize error
/node_modules/sequelize/lib/sequelize.js:508
this.importCache[path] = defineCall(this, DataTypes);
^
TypeError: defineCall is not a function
at module.exports.Sequelize.import (/node_modules/sequelize/lib/sequelize.js:508:32)
at /models/Index.js:16:33
at Array.forEach (native)
at Object.<anonymous> (/Users/vincentporta/Desktop/RCB_Classwork/cesarcell/models/Index.js:15:4)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Module.require (module.js:353:17)
at require (internal/module.js:12:17)
I've narrowed it down to the commented code in my Index.js
file below
"use strict";
var fs = require("fs");
var path = require("path");
var Sequelize = require("sequelize");
var config = require(path.join(__dirname, '..', 'config', 'config.json'))[env];
var sequelize = new Sequelize(config.database, config.username, config.password, config);
var db = {};
fs
.readdirSync(__dirname)
.filter(function(file) {
return (file.indexOf(".") !== 0) && (file !== "index.js");
})
This commented code below breaks it
//.forEach(function(file) {
// var model = sequelize.import(path.join(__dirname, file));
// db[model.name] = model;
// });
Object.keys(db).forEach(function(modelName) {
if ("associate" in db[modelName]) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
Does anyone know why this error is occuring?
回答1:
This usually means you're trying to import a non-sequelize object. If the name of your index file is Index.js
then you need to change it in your filter function (first letter is capital)
return (file.indexOf(".") !== 0) && (file !== "Index.js");
As it is case sensitive. Also check that there aren't any other files in your import folder which don't define sequelize model. If there are just add them to your filter function.
回答2:
I saw a similar problem just now and the problem was a file that was in the models folder that was not actually a database model. Ensure that your models folder only contains models for your database. Hopefully this helps!
回答3:
This can happen if you have a circular import, also.
来源:https://stackoverflow.com/questions/38217802/sequelize-error-definecall-not-defined-in-index-js