2013-06-26 25 views
0

定義的NodeJS模型時,對象不是函數這是我managedb.js類型錯誤:在使用Sequelize

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

var db = new Sequelize('tesf3', 'postgres', 'postgres', { 
    dialect: 'postgres', 
    port: '5432', 
    omitNull: true 
}); 


module.exports.db = db; 

var Link = db.import(__dirname + '/lib/link/models').Link; 
var LinkUser = db.import(__dirname + '/lib/link/models').LinkUser; 

module.exports.Link = Link; 
module.exports.LinkUser = LinkUser; 

這是我在圖書館models.js:

var sequelize = require('../../managedb').db; 
var DataTypes = require('sequelize-postgres').sequelize; 

var Link = sequelize.define('Link', { 
    url: { 
     type: DataTypes.STRING, 
     validate:{ 
     isUrl: true, 
     notEmpty: true, 
     notNull: true 
     } 
    }, 
    context: { 
     type: DataTypes.STRING, 
     defaultValue: " " 
    }, 
    previewImage: { 
     type: DataTypes.STRING 
    }, 
    source:{ 
     type: DataTypes.STRING 
    }, 
    shortUrl:{ 
     type: DataTypes.STRING 
    }, 
    viewed:{ 
     type: DataTypes.STRING 
    }, 
    image:{ 
     type: DataTypes.STRING 
    }, 
    id: { 
     type: DataTypes.INTEGER, 
     primaryKey: true, 
     autoIncrement: true 
    } 
    }, 
    { 
    instanceMethods: { 
     countTasks: function() { 
     // how to implement this method ? 
     } 
    } 
    }); 


var LinkUser = sequelize.define('LinkUser', { 
    linkId: { 
     type: DataTypes.INTEGER 
    }, 
    userId: { 
     type: DataTypes.INTEGER 
    }, 
    id: { 
     type: DataTypes.INTEGER, 
     primaryKey: true, 
     autoIncrement: true 
    } 
    }, 
    { 
    instanceMethods: { 
     countTasks: function() { 
     // how to implement this method ? 
     } 
    } 
    }); 


module.exports.Link = Link; 
module.exports.LinkUser = LinkUser; 

我在哪裏出錯了?我不能在單個js文件中定義多個模型嗎?

+0

如果您發佈的跟蹤,這將是有幫助 – Subin

回答

2

Sequelize.import expects a function to be returned from your model file(s)。我在一個單獨的文件中有每個模型。例如,link.js可能是這樣的:

module.exports = function(sequelize, DataTypes) { 
    return sequelize.define('Link', { 
     url: { 
      type: DataTypes.STRING, 
      validate:{ 
      isUrl: true, 
      notEmpty: true, 
      notNull: true 
      } 
     }, 
     context: { 
      type: DataTypes.STRING, 
      defaultValue: " " 
     }, 

     ... 

    }); 
} 

然後在您的managedb.js文件,你可以遍歷文件:

// load models 
var models = [ 
'Link', 
'LinkUser' 
]; 

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