首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Sequelize TypeError: defineCall不是函数

Sequelize TypeError: defineCall不是函数
EN

Stack Overflow用户
提问于 2017-12-18 06:24:24
回答 2查看 638关注 0票数 1

使用SQLite数据库处理express项目。

我正在得到一个我已经工作了几个小时的Sequelize TypeError,但我遇到了一个难题:

代码语言:javascript
复制
   C:\-----\node_modules\sequelize\lib\sequelize.js:392
          this.importCache[path] = defineCall(this, DataTypes);
                                   ^

    TypeError: defineCall is not a function
        at Sequelize.import (C:\----\node_modules\sequelize\lib\sequelize.js:392:32)
 at C:\----\models\index.js:25:32

在做了一些研究之后,似乎这可能是在尝试导入非顺序化对象时导致的。下面是有问题的index.js文件。

index.js:

代码语言:javascript
复制
var Sequelize = require('sequelize');

var config = {
  dialect: 'sqlite',
  storage: 'library.db'
};

var connection = new Sequelize(config);
var contents = fs.readdirSync(__dirname);
var db = {};


contents = contents.filter(function(file){

  var currFileName = __filename.split('/');
  var checkOne = file.substr(file.length - 3, 3) === '.js';
  var checkTwo = file !== currFileName[currFileName.length - 1];

  return checkOne && checkTwo;
});

contents.forEach(function(file){
  var path = [__dirname, file].join('/');
  var model = connection.import(path);

  db[model.name] = model;
});

Object.keys(db).forEach(function(modelName){
  var model = db[modelName];

  if(model.associate) {
    model.associate(db);
  }
});


module.exports = {
  models: db,
  connection: connection
};

我没有任何名为defineCall的函数,知道错误是从哪里来的吗?

EN

回答 2

Stack Overflow用户

发布于 2019-03-27 04:01:56

这确实是由于导入了一个不是Sequelize模型的文件造成的。在我的例子中,这是因为我的index.js正在拉入我的测试文件以及位于同一目录中的模型。尝试添加另一个检查,如checkOne,以排除所有以.test.js结尾的内容。

票数 1
EN

Stack Overflow用户

发布于 2020-05-19 13:05:23

从@Floppy的答案中得到了提示,我意识到如果我们将这些相关文件封装在一个文件夹中会更好。

例如。创建一个名为Models的文件夹,并将您的index.js与所有模型一起存储(例如.用户模型、照片模型等),然后尝试。

谢谢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47860060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档