2017-03-24 7 views
0

ノード内でモデルオブジェクトをsequelizeモジュールで使用しようとしています。Nodejsでコントローラのモデルをインスタンス化する方法は?

私はこれらのようなものがあります。

File structure: 
models 
    index.js 
    user.js 
controllers 
    userController.js 
routes 
    route.js 

==========================を

models/users.js 
//generated through sequelize cli 
'use strict'; 
module.exports = function(sequelize, DataTypes) { 
    var user = sequelize.define('user', { 
    name: DataTypes.STRING, 
    job: DataTypes.STRING 
    }, { 
    classMethods: { 
     associate: function(models) { 
     // associations can be defined here 
     } 
    } 
    }); 
    return user; 
}; 

models/index.js // sequelizeでファイルを生成しました。

controllers/userController.js 

var model = require('../models/user'); 

var userController = function(){ 
    function createOne (req, res) { 
     model.create({ 
      'name': 'John', 
      'job':'manager' 
     }).then(function(test){ 
      console.log(test); 
     }) 
    } 

    return { 
     createOne: createOne   
    } 
} 

module.exports = userController; 

ときに私のルート要求userController.createOne()、私は問題が何であるかとモデルがコントローラに注入取得する方法を確認していないmodel.create is not a function

を取得しています。誰もそれについて私を助けることができますか?どうもありがとう!

更新

my models/index.js //generated by sequelize cli 

'use strict'; 

var fs  = require('fs'); 
var path  = require('path'); 
var Sequelize = require('sequelize'); 
var basename = path.basename(module.filename); 
var env  = process.env.NODE_ENV || 'development'; 
var config = require(__dirname + '../config/config.json')[env]; 
var db  = {}; 

if (config.use_env_variable) { 
    var sequelize = new Sequelize(process.env[config.use_env_variable]); 
} else { 
    var sequelize = new Sequelize(config.database, config.username, config.password, config); 
} 

fs 
    .readdirSync(__dirname) 
    .filter(function(file) { 
    return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js'); 
    }) 
    .forEach(function(file) { 
    var model = sequelize['import'](path.join(__dirname, file)); 
    db[model.name] = model; 
    }); 

Object.keys(db).forEach(function(modelName) { 
    if (db[modelName].associate) { 
    db[modelName].associate(db); 
    } 
}); 

db.sequelize = sequelize; 
db.Sequelize = Sequelize; 

module.exports = db; 

答えて

1

通常は、models/index.jsが正しくSequelizeオブジェクトにこれらをステージングせ、その後、個別のモデルを定義します。後で

const models = require('../models'); 

const User = models.User; 

User.create()などと呼ぶことができます。裸のモデル定義ファイルは完全なパッケージではありません。

+0

ありがとうございますが、** require( '../ models)**から** user **を削除すると、**エラー:'/usr/src/app/server/models 'モジュールを見つけることができません。 ./config/config.json'** +1 tho。 – Jwqq

+0

あなたのデータベースの設定が見当たりません。それは別の問題です、心配してください。 – tadman

+0

hm..私は自分のデータベースの設定が正しいと信じています。 config.jsonには、正しいdb資格があります。私はもっ​​と掘るよ。 ty – Jwqq

関連する問題