読者です 読者をやめる 読者になる 読者になる

Mongoose用のラッパー的なものを書いてみた

前回の記事からリファクタリングしてみた。

models/models.js

var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

var ModelModule = function(){};

/**
 * ドキュメント作成
 */
ModelModule.prototype.create = function(){
  var ModelSchema = new Schema(this.field);
  mongoose.model(this.document,ModelSchema);
};


var ModelCreate = function(document,field){
   
  var Klass = {},
      /**
       * コンストラクタ
       * @document : ドキュメント名
       * @field    : フィールド定義 
       */
      Model = function(document,field){
        this.document = document;
        this.field = field;
      };
  
  Model.prototype = new ModelModule();
  
  /**
   * コネクション接続
   */
  Model.prototype.connection = function(){
    mongoose.connect('mongodb://localhost/sample_db');
  };
 
  /**
   * コネクション切断
   */
  Model.prototype.close = function(){
    mongoose.disconnect(function(err) {
      console.log(err ? err : 'connection close');
    }); 
  };
  
  /**
   * ドキュメントインスタンス取得
   */
  Model.prototype.getInstance = function(){
    return mongoose.model(this.document) || null;
  };
  
  //モデルを生成し、インスタンスを返す。
  model =  new Model(document,field);
  model.create();
  return model;
};

module.exports = ModelCreate;


実装してみる。

models/task_model.js

var TaskModel = require('./models')('task',{'text':String});

module.exports = TaskModel;


POSTでINSERT

routes/task.js

var router = require('./route.js').router,
    TaskModel = require('../models/task_model.js'),
    Task = TaskModel.getInstance();
    
//コネクション接続
TaskModel.connection();

router.post('/tasks', function(req, res, next) {
  
  task = new Task();
  task.text = req.body.text;
  
  task.save(function(err){
    console.log( err ? err : 'insert success' );
  });
  
  res.render('index');
});
module.exports = router;

コネクション開きっぱなし....。
コネクション周りをどうするかはまだ検討中。
とりあえずコネクションが接続していれば既存コネクションを利用して
開いていなければコネクションを新規に接続するといったコードを書く予定。