2016-07-06 8 views
2

で定義されていないdefineCall私はこのsequelizeエラーにSequelizeエラー:Index.js

/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) 

を受けてきた私は

"use strict";

以下の私の Index.jsファイルにコメントしたコードにそれを絞り込むました
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"); 
    }) 

このコメント以下のコードは、それを //.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; 

このエラーが発生する理由を知っている人はいますか?

+0

どのSequelizeのバージョンを使用していますか? – rels

+0

@rels Sequelize [ノード:4.4.2、CLI:2.4.0、ORM:2.0.0-rc1、mysql:^ 2.10.2] – vincentjp

答えて

5

これは通常、非連続オブジェクトをインポートしようとしていることを意味します。あなたのインデックスファイルの名前はIndex.jsであれば、それは大文字と小文字が区別されるとして、あなたは

return (file.indexOf(".") !== 0) && (file !== "Index.js"); 

(最初の文字は首都である)あなたのフィルタ機能でそれを変更する必要があります。また、後継モデルを定義していない他のファイルがインポートフォルダにないことを確認してください。フィルタ機能に追加するだけの場合

4

私はこれまで同様の問題を抱えていましたが、実際にはデータベースモデルではないモデルフォルダ内のファイルが問題でした。モデルフォルダにはデータベースのモデルのみが含まれていることを確認してください。うまくいけば、これは役立ちます!