Как MVC-подобный код будет работать в Node.js? - PullRequest
25 голосов
/ 01 февраля 2010

Я начинаю разбираться в node.js и пытаюсь понять, как бы я делал обычные вещи MVC. Например, вот представление Django, которое извлекает два набора записей из базы данных и отправляет их для визуализации в шаблон.

def view(request):
    things1 = ThingsOne.objects.all()
    things2 = ThingsTwo.objects.all()
    render_to_response('template.html, {'things1': things1, 'things2': things2})

Как может выглядеть похожая функция node.js?

Ответы [ 4 ]

13 голосов
/ 06 марта 2011

http://boldr.net/mvc-stack-node-js-ejsgi-scylla-mustache - отличная небольшая статья с полным примером github шаблона MVC с использованием модулей Node. В нем также перечислены альтернативные модули, доступные в настоящее время. Он ответил на этот вопрос для меня лучше, чем http://howtonode.org/, в котором есть несколько хороших речей, но я не смог найти там ничего по MVC.

0 голосов
/ 12 ноября 2012

RailwayJS - это среда MVC, написанная на JavaScript на основе ExpressJS и работающая на платформе nodeJS.Он вдохновлен платформой Ruby on Rails.Вы можете прочитать об архитектуре MVC RailwayJS здесь: http://jsmantras.com/blog/RailwayJS-Routing

0 голосов
/ 15 мая 2012

TowerJS - это популярный MVC-фреймворк, основанный на

  • MongoDB (база данных)
  • Redis (фоновые задания)
  • CoffeeScript
  • Стилус
  • Жасмин (тесты)
  • JQuery

Сайт http://towerjs.org/

Источник https://github.com/viatropos/tower

0 голосов
/ 22 марта 2011

Самый простой способ сделать это с помощью expressjs, который является инфраструктурой MVC для Node. Node - это то, что он говорит, четный ввод / вывод для сети.

Пример на http://expressjs.com должен помочь с основами, но ответить на ваш вопрос напрямую.

var express = require('express');

var app = express.createServer();

app.get('/whatever', function(req, res) {

  Things1.objects.getAll(function(things1) {
    Things2.objects.getAll(function(things2) {
      var options = { locals: { things1: things1, things2: things2 }};
      res.render('thingstemplate.ejs', options); // or thingstemplate.jade or whatever
   });
  });
});

app.listen('80', ''); // port and optional hostname to bind
...