2014-12-28 2 views
1

Мне нужна структура MVC, которая была чем-то и объективным, без «mimimi».Создайте мою собственную структуру mvc с node.js, купите и используйте restful api

Я ничего не нашел, поэтому создаю свою собственную структуру MVC с успокаивающим api. У меня возникли проблемы с передачей данных моих контроллеров для маршрута. Может кто-нибудь мне помочь?

Я создаю поверх выражения генератора и представляет собой структуру, которая отделяет сервер/клиент. Это структура до сих пор:

http://i.imgur.com/GKzVSn8.png

Обратите внимание на разделение клиент/сервер.

controllers.js:

var example = require('./models/example'); 

exampleController = function() { 

    // POST 
    this.create = function(req, res, params) { 

    }; 

    // GET 
    this.read = function(req, res, params) { 

    }; 

    // PUT 
    this.update = function(req, res, params) { 

    }; 

    // DELETE 
    this.delete = function(req, res, params) { 

    }; 

}; 

module.exports = exampleController; 

Могу ли я сделать renderization для некоторого маршрута здесь?

Это мой client.js маршрут:

var express = require('express'); 
var router = express.Router(); 

var exampleController = require('../controllers/example'); 



router.get('/', function(req, res) { 

}); 


module.exports = router; 

Как я могу использовать функцию контроллера в моих маршрутах?

Немного потеряно здесь ..

Спасибо.

ответ

0

Почему не загружается каждый контроллер при запуске, приходящий к каждому контроллеру объект маршрутизатора:

Используйте этот модуль для загрузки каждого контроллера при запуске:

module.exports = function(router) { 
    var fs = require('fs'); 

    // Setup controllers 
    var controllers = fs.readdirSync(__dirname + '/controllers'); // <-- use your controllers path 

    controllers.forEach(function(controllerName){ 
     var module = require('./controllers/' + controllerName); 

     if (typeof handle === "function") { 
      module(router); 
     } 
    }); 
}; 

Тогда exampleController может быть, как это :

var proto = exampleController.prototype; 

function exampleController(router) { 

    // GET 
    router.get('/', proto.index) 
}; 

proto.index = function(req, res) { ... }; 

module.exports = exampleController; 

Не забудьте позвонить в первый модуль за год ur entry point .js file:

i.e: server.js: 

var controllersLoader = require('path-to-module'); 

var express = require('express'); 
var router = express.Router(); 

controllersLoader(router); 
+0

Я решил с другим решением @ Даниэль, но ваше решение тоже здорово! Спасибо за помощь!!! –

0

Вы просто использовать функцию от вас контроллер в качестве обратного вызова для маршрутизатора получить, пост и т.д. Метод:

var exampleController = require('../controllers/example'); 

router.get('/', exampleController.read); 
0

Используйте app.put(), app.post(), приложение. get() и app.delete(), которые являются частью Express. Это означает, что вам нужно изменить структуру своего модуля, чтобы передать экспресс-приложение в функцию инициализации, чтобы установить настройки.

module.exports = { 
    init: function (route, app) { 
     app.get(route, function (req, res) { 
      // get functionality 
     }); 
     app.put(route, function (req, res) { 
      // put functionality 
     }); 
     app.delete(route, function (req, res) { 
      // delete functionality 
     }); 
     app.post(route, function (req, res) { 
      // post functionality 
     }); 
    } 
}; 
Смежные вопросы