Сегодня я решил - пора взяться за веб со стороны Node.js. А именно я решил присмотреться, каково вообще вести разработку на серверном JavaScript. В качестве серверного фреймворка я взял Sails.js - он мне приглянулся хорошей документацией и наличием некоторого количества примеров. В связке с ним я взял Backbone.js для клиентской части - после первого знакомства стоит поработать с ним поглубже. А общей целью поставил написать небольшой ToDo менеджер. Поехали!
Установка
Про установку и настройку серверной части говорить не интересно, потому приведу команды, которые я выполнил в консоли (предварительно установив node.js и npm):
|
|
Обращу внимание на то, что я сделал в конце: я создал новое приложение todo
, sails любезно создал всю структуру файлов, затем я создал API: шаблон для модели Task
и соответствующий ему RESTful контроллер, а также контроллер Main
. Все это интересно и непонятно. Task
будет хранить информацию о задачах, а контроллер выводить страницу с их списком. Создав модель, sails так же любезно создал нам набор RESTful API с CRUD методами так, что уже сейчас, запустив приложение и перейдя по адресу localhost:1337/Task/
можем увидеть все модели Task
. Скажем, не модели, а объекты.
Модель Task
Далее идем в api\models\Task.js
, где создаем все поля для модели. Нам хватит поля текста задачи и логического поля, выражающего завершенность задачи:
|
|
В принципе тут мы со всем разобрались. У нас есть два поля, мы определили их название и типы. Перейдем к контроллеру.
Контроллер Main
Идем в api\controllers\MainController.js
. Там создаем следующее содержимое:
|
|
Теперь заглянем в confir\routes.js
. Здесь мы прописываем, что хотим вызывать функцию index
из нашего контроллера по запросу корня сайта (За нас конечно уже прописан шаблон homepage
, но ведь это не то, что мы хотим), потому делаем так:
|
|
Попробуем все это дело запустить. Выполняем sails lift
и получаем ошибку, что у нас не стоит адаптер sails-disk
для работы с локальной БД. Ставим и пробуем еще раз. Запустилось! Переходим на сайт и получаем ошибку - не задан шаблон для контроллера.
Шаблоны
Создадим в папке view\main\
файл index.ejs
- файл нашего будущего шаблона. Собственно название шаблона мы могли прописать сразу в роутере, но через контроллер нагляднее и интереснее. Содержимое файла будет следующим:
|
|
Обратим внимание на <%= count %>
- это параметр, который мы передадим в контроллере вот так:
|
|
Где вместо пропуска будет получение общего количества записей.
Клиентская часть
Для начала подключим все необходимые библиотеки:
|
|
Создадим нашу модель, указав адрес, по которому она обрабатывается:
|
|
Далее нужно описать коллекцию, которая хранит все модели:
|
|
Проинициализируем коллекцию и загрузим ее с сервера:
|
|
Далее привяжем к нашей кнопке событие добавления записи:
|
|
Теперь осталось описать вид и рендер коллекции. Шаблон будет таким: {{ }}
, дабы не было конфликтов с шаблонами Sails.js:
|
|
Теперь осталось самую малость - описать вид:
undefinedВсе, создаем объект вида и тестируем: var mView = new TaskView({collection: tasks});
. Кнопка добавления добавляет новую запись сразу в коллекцию, а также синхронизируется с сервером, потому, если перезагрузить страницу, данные никуда не пропадут. Конечно, стоит позаботиться о серверной части, дабы в реальном приложении нельзя было удалить записи из базы, просто перейдя по нужной ссылке API.
Заключение
Скажу просто - это круто. Никаких особых заморочек с БД, нету особых сложностей с клиентской частью, да и с серверной. По сути - описать контроллеры, модели, шаблоны, сделать их связку, описать работу моделей и коллекций в клиентской части - и все готово. Ради интереса гляну еще некоторые MVC фреймворки, не только для Node.js, но и для других языков.