Skip to content

Фреймворки в Node.js: Geddy

26/04/2010

Geddy — очень интересный фреймворк от Github-пользователя mde. Его особенности: модульность, понятный код и автоматическая генерация шаблонов приложений.

Установка

Ставим geddy из git. Вообще то автор сделал фреймворк для версии Node.js 0.1.33, поэтому чтобы не устанавливать старую версию, я форкнул его код и сделал апдейт для работы с 0.1.90 и возможно 0.1.91. Сейчас эти изменения уже внесены в основную ветку Geddy, поэтому берём её:

git clone git://github.com/mde/geddy.git

Делаем make && make install.

cd geddy
make && make install

Использование

Geddy способен сам создавать заготовки приложений с помощью командной строки. Заводим где нибудь каталог для экспериментов, и там создаём приложение:

geddy-gen app water

Будет создан каталог с нашим приложением. Заходим, запускаем:

cd water
geddy

Geddy сообщает что сервер запущен на 8000 порту и слушает. Заходим в браузер, видим тестовую страницу (с текстом «Attention all planets of Solar Federation«).

Структура приложения

Итак, что нам нагенерил Geddy? На удивление, всё довольно грамотно и аккуратно разложено. Вот структура папок и файлов чистого проекта:

\water
 + /app
   + /controllers
     + application.js
     + main.js
   + /views

 + /config
   + config.js
   + router.js

 + /public

У нас есть файл конфигурации и основной роутер. Роутер, что приятно, может использовать несколько разных контроллеров. Сами контроллеры находятся в каталоге /app/controllers и представляют из себя CommonJS-модули. Кроме этого имеется каталог для вьюшек (/app/views)и файлов (/public).

Роутеры работают примерно так же как в Rails:

// Динамический роутер
router.match('/moving/pictures/:id').to(
  {controller: 'Moving', action: 'pictures'});

// Разные контроллеры
router.match('/farewells/:farewelltype/kings/:kingid').to(
   {controller: 'Farewells', action: 'kings'});

// Прямое указание метода
router.match('/xandadu', 'get').to(
  {controller: 'Xandadu', action: 'specialHandler'});

Ресурсы

Также Geddy может создавать ресурсы. В каталоге приложения делаем:

geddy-gen resource fish

Чтобы проверить работу созданного нами ресурса, запускаем geddy и заходим по адресу /fish.json — мы должны увидеть что то вроде этого:

{"method":"index","params":{"extension":"json"}}

В контроллер сразу передаётся метод и параметры (в частности — расширение запрошенного файла). Geddy сразу создаёт шаблоны для создания/удаления контента:

GET */fish*

(Контроллер fish, действие index)

GET */fish/add*

(Контроллер fish, добавление записи, доступно сразу в созданных ресурсах)

POST */fish*

(Контроллер fish, создание записи)

GET */fish/:id*

(Контроллер fish, получение записи)

PUT */fish/:id*

(Контроллер fish, изменение записи)

DELETE */fish/:id*

(Контроллер fish, удаление записи)

Для добавления используется add, т.к. new — зарезервированное слово в JavaScript.

Автоматическое определение типа контента

В Geddy есть система автоматического определения типа контента. Т.е., если запрошен файл с расширением json, можно передать в функцию respond JavaScript-объект, и он будет автоматически преобразован в JSON и отправлен пользователю с соответствующим Content-Type:

this.respondsWith = ['text', 'json'];

this.show = function (params) {
    // (Fetch some item by params.id)
    item = {foo: 'FOO', bar: 1, baz: false};
    this.respond(item);
};

Фреймворки в Node.js

Ссылки по теме

3 комментария
  1. как то мы с рыб перешли к собакам🙂

    PUT */snow_dogs/:id*
    (Контроллер fish, изменение записи)

    DELETE */snow_dogs/:id*
    (Контроллер fish, удаление записи)

Trackbacks & Pingbacks

  1. Tweets that mention Фреймворки в Node.js: Geddy « Механический мир -- Topsy.com

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: