我一直试图弄清楚如何修复index.js文件生成的以下错误。我使用Node,Express和sequelize。
/app/node_modules/sequelize/lib/sequelize.js:691
server_1 | this.importCache[path] = defineCall(this, DataTypes);
server_1 | ^
server_1 |
server_1 | TypeError: defineCall is not a function
正如我所理解的那样,错误是因为我将一些不是续集模型的东西导入到我的index.js文件中(参见下面的index.js代码)。但我根本无法找到问题所在。下面是代码。任何帮助将非常感激!
预订型号代码:
var Sequelize = require('sequelize');
var config = require('../config');
var db = require('../services/database');
// 1: The model schema.
var modelDefinition = {
name: {
type: Sequelize.STRING
}
};
// 2: Define the User model.
var BookingModel = db.define('booking', modelDefinition);
// DB relations
BookingModel.associate = (models) => {
BookingModel.hasMany(models.BookingModel, {});
};
module.exports = BookingModel;
Index.js文件的重要部分:
fs
.readdirSync(__dirname)
.filter(function(file) {
return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
})
.forEach(function(file) {
var model = sequelize.import(path.join(__dirname, file));
db[model.name] = model;
});
答案 0 :(得分:1)
Sequelize模型文件必须采用以下格式,
module.exports = function(connection, Sequelize){
var table = connection.define('table', {
id : Sequelize.INTEGER,
});
return table;
}
在您指定的模型中,它会导出模型定义,这就是出错的原因。 sequelize希望每个模型都能导出一个返回表定义的函数。
答案 1 :(得分:0)
在我的情况下,这是因为我的index.js
提取了我的测试文件以及模型,它们都在同一目录中。确保模型目录中没有其他文件,或者如果没有其他文件(例如测试),请确保index.js
在构建文件列表时将它们排除在外。