簡體   English   中英

Sequelize TypeError:defineCall 不是函數

[英]Sequelize TypeError: defineCall is not a function

使用 SQLite 數據庫處理 express 項目。

我遇到了一個 Sequelize TypeError,我已經研究了幾個小時,但我遇到了磚牆:

   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 文件。

索引.js:

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的函數,知道錯誤來自哪里嗎?

這確實是由於導入了不是 Sequelize 模型的文件引起的。 就我而言,這是因為我的index.js正在拉入我的測試文件以及位於同一目錄中的模型。 嘗試添加另一個檢查,如checkOne以排除以.test.js結尾的任何.test.js

根據@Floppy 的回答的提示,我意識到如果我們將這些相關文件存儲在一個文件夾中會更好。

例如。 創建一個名為Models的文件夾並將您的index.js與所有模型(例如用戶模型、照片模型等)一起存儲,然后嘗試。

謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM