2013-06-07 8 views
5

に 'を定義':これは私のuser.jsのでsequelize.defineエラー:方法はありません。これは、すべてのデータベースモデルを管理し、私のmanagedb.jsあるnodejs

var sequelize = require("sequelize"); 
var seq = require("./managedb"); 
var db = seq.db; 

var Project = db.define('Project', { 
    title: sequelize.STRING, 
    description: sequelize.TEXT 
}); 

ある

var Sequelize = require('sequelize-postgres').sequelize 
var postgres = require('sequelize-postgres').postgres 

var db = new Sequelize('testdb', 'postgres', 'postgres', { 
    dialect: 'postgres' 
}) 


var models = [ 
'user' 
]; 

models.forEach(function(model) { 
module.exports[model] = db.import(__dirname + '/' + model); 
}); 



exports.db = db; 

私のapp.js

var seq = require('./models/managedb'); 
seq.db.sync(); 

私が手にエラーがこれです:

var Project = sequelize.define('Project', { 
         ^
TypeError: Object function (database, username, password, options) { 
    var urlParts 
    options = options || {} 

    if (arguments.length === 1 || (arguments.length === 2 && typeof username === 'object')) { 
     options = username || {} 
     urlParts = url.parse(arguments[0]) 
     database = urlParts.path.replace(/^\//, '') 
     dialect = urlParts.protocol 
     options.dialect = urlParts.protocol.replace(/:$/, '') 
     options.host = urlParts.hostname 

     if (urlParts.port) { 
     options.port = urlParts.port 
     } 

     if (urlParts.auth) { 
     username = urlParts.auth.split(':')[0] 
     password = urlParts.auth.split(':')[1] 
     } 
    } 

    this.options = Utils._.extend({ 
     dialect: 'mysql', 
     host: 'localhost', 
     port: 3306, 
     protocol: 'tcp', 
     define: {}, 
     query: {}, 
     sync: {}, 
     logging: console.log, 
     omitNull: false, 
     queue: true, 
     native: false, 
     replication: false, 
     pool: {}, 
     quoteIdentifiers: true 
    }, options || {}) 

    if (this.options.logging === true) { 
     console.log('DEPRECATION WARNING: The logging-option should be either a function or false. Default: console.log') 
     this.options.logging = console.log 
    } 

    this.config = { 
     database: database, 
     username: username, 
     password: (((["", null, false].indexOf(password) > -1) || (typeof password == 'undefined')) ? null : password), 
     host : this.options.host, 
     port : this.options.port, 
     pool : this.options.pool, 
     protocol: this.options.protocol, 
     queue : this.options.queue, 
     native : this.options.native, 
     replication: this.options.replication, 
     maxConcurrentQueries: this.options.maxConcurrentQueries 
    } 

    var ConnectorManager = require("./dialects/" + this.options.dialect + "/connector-manager") 

    this.daoFactoryManager = new DAOFactoryManager(this) 
    this.connectorManager = new ConnectorManager(this, this.config) 

    this.importCache = {} 
    } has no method 'define' 

答えて

5

これは、Sequelizeをインスタンス化する必要があるためです。

var Sequelize = require("sequelize"); 

var sequelize = new Sequelize('database', 'username'); 

var Project = sequelize.define('Project', { 
    title: sequelize.STRING, 
    description: sequelize.TEXT 
}); 
+0

どのモデルでも後遺症をインスタンス化する必要がありますか?私はちょうど管理DBからインポートすることができますか? – Hick

+0

はい、通常、モデルには同じインスタンスを使用する必要があります。編集:インスタンスをmodule.exportsして、それを使用して他のファイルでモデルを定義することができます。 –

+0

エラーは引き続き発生します。コードの変更を表示するために質問を編集しました。エクスポート/インポートが間違っていましたか? – Hick