image Обычно при веб-разработке на всех уровнях стека используются разные языки программирования. База данных MongoDB, фреймворки Express и AngularJS и технология Node.js вместе образуют стек MEAN — мощную платформу, на всех уровнях которой применяется всего один язык: JavaScript. Стек MEAN привлекателен для разработчиков и бизнеса благодаря простоте и экономичности, а конечные пользователи любят MEAN-приложения за их скорость и отзывчивость.

JavaScript достиг зрелости. Благодаря ему теперь можно создать веб-приложение от начала до конца с помощью всего одного языка программирования. Стек MEAN включает в себя лучшие в своем классе технологии в данной области. В качестве БД вы получаете MongoDB, в качестве серверного фреймворка веб-приложений — Express, в качестве клиентского фреймворка — AngularJS, а в качестве серверной платформы — Node.

Эта книга познакомит вас с каждой из этих технологий, а также с тем, как заставить их работать вместе в качестве стека. На протяжении этой книги мы создаем работающее приложение, сосредотачиваясь по очереди на каждой технологии, наблюдая, как она вписывается в общую архитектуру приложения. Так что эта книга ориентирована на практику, на то, чтобы вы освоились со всеми перечисленными технологиями и их совместным использованием.

Через всю книгу красной нитью проходит понятие «рекомендуемое решение». Издание — своеобразный трамплин для создания с помощью стека MEAN замечательных приложений, так что в нем мы концентрируемся на выработке хороших привычек, умения делать все правильно и планировать все заранее.

Эта книга не учит тому, как использовать HTML, CSS или базовый JavaScript, — предполагается, что читатель уже знаком с ними. Она включает очень краткое изложение основ CSS-фреймворка Twitter Boo tstrap. Кроме того, бонусом к ней идет отличное приложение по JavaScript — его теории, рекомендуемым решениям, советам и глюкам. Не помешает заглянуть туда пораньше.

Дорожная карта


Эта книга приглашает вас в путешествие по 11 главам.
Глава 1 рассматривает преимущества изучения разработки full-stack и анализирует компоненты стека MEAN.
Глава 2 основывается на приобретенном знании компонентов и обсуждает варианты их совместного использования для создания различных вещей.
Глава 3 знакомит с Express и помогает быстро освоить создание и настройку проекта MEAN.
Глава 4 дает более глубокие познания в Express посредством построения статической версии приложения.
Глава 5 использует уже имеющиеся знания о приложении и применяет MongoDB и Mongoose для проектирования и построения требующейся нам модели данных.
Глава 6 охватывает преимущества и процессы создания API данных. Мы создадим API REST с помощью Express, MongoDB и Mongoose.
Глава 7 связывает API REST с приложением путем его получения из нашего статического приложения Express.
Глава 8 является введением в стек AngularJS: мы увидим, как использовать его в создании компонентов для существующей веб-страницы, в том числе как обращаться к API REST для получения данных.
Глава 9 излагает основы создания одностраничных приложений с помощью Angular, демонстрируя разработку удобного в сопровождении модульного масштабируемого приложения.
Глава 10 базируется на материале главы 9, в ней продолжается разработка одностраничного приложения. При этом излагаются некоторые важные концепции и повышается сложность приложения Angular.
Глава 11 затрагивает все части стека MEAN, так как связана с добавлением в приложение аутентификации, позволяющей пользователям регистрироваться и заходить в приложение.

Отрывок из книги
2.3. Разработка гибкой архитектуры MEAN


Если работа с AngularJS похожа на обладание Porsche, то остальная часть стека соответствует наличию в гараже дополнительного Audi RS6. Множество людей обратят внимание на спортивную машину перед домом и не заметят автомобильуниверсал в гараже. Но если все-таки зайти в гараж и полюбопытствовать, то окажется, что под его капотом двигатель Lamborghini V10. Этот автомобиль-универсал может предложить гораздо больше, чем кажется на первый взгляд!

Использование MongoDB, Express и Node.js вместе только для создания API REST подобно использованию Audi RS6 лишь для того, чтобы возить ребенка в школу. И они и он обладают отличными возможностями и выполнят эту работу очень хорошо, но при этом способны на большее.

Мы уже кратко обсуждали, что можно получить с помощью этих технологий, в главе 1, но вот несколько отправных точек.

— MongoDB может хранить и обрабатывать потоковым образом двоичную информацию.
— Node.js особенно хорош для подключений в режиме реального времени с помощью веб-сокетов.
— Express — фреймворк веб-приложений со встроенными применением шаблонов,
маршрутизацией и управлением сеансами.

Это далеко не полный список, и я определенно не смогу рассмотреть все возможности всех этих технологий в данной книге. Мне бы понадобилось несколько книг для этого! Все, что я могу сделать, — привести простой пример и показать, как можно соединить воедино части стека MEAN для проектирования наилучшего решения.

2.3.1. Требования к движку блога


Взглянем на уже знакомую нам идею движка блога и посмотрим, как можно наилучшим образом спроектировать стек MEAN для его создания.

Движок блога обычно включает две части. Это ориентированная на публику интерфейсная часть, выдающая читателям статьи, которые, хочется надеяться, будут перепродаваться и распространяться по Интернету. У движка блога имеется также интерфейс администратора, в который владельцы блогов входят для написания новых статей и управления своими блогами. Некоторые из основных характеристик этих двух частей демонстрирует рис. 2.2.

image

Глядя на списки на рис. 2.2, легко увидеть высокий уровень конфликтования между характеристиками этих двух частей. Вам нужна насыщенная контентом и слабоинтерактивная среда для статей блогов и богатая возможностями высокоинтерактивная среда для административного интерфейса. Статьи блога должны быть быстрозагружаемыми — для снижения показателя отказов, тогда как административная область должна быстро реагировать на действия пользователя и вводимые им данные. Наконец, пользователи обычно задерживаются на записи в блоге ненадолго, но могут захотеть поделиться ею с другими, тогда как административный интерфейс необщедоступен и отдельный пользователь может работать в нем длительное время.

Принимая во внимание обсуждавшиеся ранее потенциальные проблемы со SPA и глядя на характеристики записей в блоге, вы можете обнаружить немало совпадений. Вполне вероятно, что с учетом этого вы решите не использовать SPA для выдачи своих записей в блоге читателям. В то же время SPA отлично подходит для административного интерфейса.

Так что же делать? Возможно, самым важным будет удержание читателей блога — если их впечатления от вашего блога были негативными, они просто не вернутся и не будут делиться записями. Если блог не привлекает, то блогер просто прекратит в него писать или перейдет на другую платформу. Опять-таки медленный и плохо реагирующий административный интерфейс станет причиной того, что владельцы блогов начнут «убегать с корабля». Как можно добиться того, чтобы все были довольны, а движок блога был при деле?

2.3.2. Архитектура движка блога


Ответ заключается в том, что не надо искать одно решение на все случаи жизни. Пусть у вас будет два приложения. У вас есть ориентированный на публику контент, который нужно доставлять непосредственно с сервера, и интерактивный необщедоступный административный интерфейс, который вы хотите выполнить в виде SPA. Давайте рассмотрим каждое из этих приложений по отдельности, начав с административного интерфейса.

Административный интерфейс: SPA на AngularJS


Мы уже обсуждали, что для административного интерфейса идеально подходило бы SPA, построенное на основе AngularJS. Так что архитектура этой части движка будет выглядеть очень знакомо: API REST, построенный на MongoDB, Express и Node.js, с одностраничным приложением на AngularJS в интерфейсной части. Рисунок 2.3 демонстрирует, как это будет выглядеть.

image

Записи в блоге: что делать?


Если задуматься о записях в блоге, то все оказывается несколько сложнее.

Представьте себе стек MEAN только как одностраничное приложение на AngularJS, обращающееся к API REST, и вы окажетесь в дураках. Вы можете в любом случае создать интерфейсную часть в виде SPA, раз хотите использовать JavaScript и стек MEAN. Но это не лучшее решение. Вы можете счесть, что стек MEAN просто не подходит для данного случая, и выбрать другой стек технологий. Но вам ведь этого не надо! Вам нужен просто сплошной JavaScript.

Так что взглянем на стек MEAN повнимательнее и подумаем обо всех его компонентах. Вы знаете, что Express — фреймворк веб-приложений. Вы знаете, что Express может использовать шаблонизаторы для создания HTML-кода на сервере. Вы знаете, что Express может использовать маршрутизацию URL и паттерны MVC. Вам стоит задуматься: а не в Express ли заключается ответ?

Записи в блоге: используем Express


В данном сценарии с блогом доставка HTML-кода и контента непосредственно с сервера — именно то, что вам нужно. Express выполняет это особенно хорошо, даже с самого начала обеспечивает выбор шаблонизаторов. HTML-содержимое потребует данные из БД, так что вы снова используете для этого API REST (подробнее мы рассмотрим, почему это наилучший подход, в следующем подразделе). Основу такой архитектуры демонстрирует рис. 2.4.

image

Вы получаете подход, при котором можете использовать стек MEAN или по крайней мере его часть для доставки основанного на базе данных контента непосредственно от сервера к браузеру. Но этим дело не ограничивается. Стек MEAN еще более гибок.

Записи в блоге: используем стек полнее


Вы видели приложение Express, выдающее контент блога посетителям. Если вам нужно, чтобы посетители могли заходить на сайт, возможно, для добавления комментариев к статьям, вам необходимо отслеживать сеансы пользователей. Для этого можно использовать MongoDB вместе с вашим приложением на Express.

Можно также рядом с вашими сообщениями в блоге динамически отображать какие-либо данные, например связанные сообщения или поисковое поле с автодополнением, опережающим ввод с клавиатуры. Их можно реализовать с помощью AngularJS. Помните: AngularJS предназначен не только для SPA, его можно использовать также для добавления каких-нибудь интерактивных данных на страницу, которая иначе была бы статической. Рисунок 2.5 показывает, как эти необязательные части MEAN добавляются в архитектуру компонента блога.

image

Теперь вы можете организовать взаимодействие приложения, выдающего посетителям контент и основанного на полном стеке MEAN, с вашим API REST.

Движок блога: гибридная архитектура


На этой стадии у нас имеется два отдельных приложения, использующих API REST. Если немного спланировать, это может быть общий API REST, применяемый обеими частями приложения. Целостность архитектуры с одним API REST, взаимодействующим с двумя приложениями клиентской части, демонстрирует рис. 2.6.

image

Это простой пример демонстрации возможности соединения разнообразных частей стека MEAN в различные архитектуры для удовлетворения требований, которые предъявляет к вам проект. Возможные варианты ограничиваются лишь вашим знанием компонентов и изобретательностью при их сочетании. Не существует какой-то одной правильной архитектуры для стека MEAN.

» Более подробно с книгой можно ознакомиться на сайте издательства
» Оглавление
» Отрывок

Для Хаброжителей скидка 25% по купону — Стек
Поделиться с друзьями
-->

Комментарии (19)


  1. eveness
    14.03.2017 20:43
    +1

    Книга чудесна. Поэтапное создание приложения с размышлениями почему стоит делать так или иначе, разбором ошибок, уместности использования той или иной технологии, напоминаниями особенностей архитектуры и постоянным призывом думать — это прекрасно. Тут тебе и проектирование и, можно сказать, тестирование, с переносом данных из представления в контроллер, затем в базу, затем в api.

    Пара забытых пробелов, совсем чуть-чуть тяжелых формулировок и переизбыток бустраповской верстки не умаляют восторга. Не смотря на то, что репозиторию по книге уже более двух лет, никаких проблем с несовместимостью по ходу не возникло. Ну а сам подход к проектированию не устареет еще долгое время.

    Ну и конечно все буквы MEAN освещены достаточно хорошо для того, чтобы понимать как все работает и что можно сделать с помощью той или иной технологии. Manning удивили и выбились в фавориты, отжав у O`Reilly теплое местечко на книжной полке.

    А с нескромным предложением "Каждая из его (стека MEAN) технологий великолепна, а уж когда они объединяются, получается нечто исключительное." согласна теперь полностью. Интересно, увлекательно, полезно.


    1. Inlore
      14.03.2017 22:01
      +2

      Простите, но ваш комментарий выглядит слишком рекламно и «купленно», тем более, что он единственный в профиле. Всё желание читать книгу отпало


      1. eveness
        14.03.2017 22:17

        Жаль, что мой способ выражаться и желание именно в этот момент выползти на свет отбило ваше желание. Прочитала, попробовала, выразилась как умею. Надо, видимо, было написать "норм" — вот это была бы отличная реклама подобных технических талмудов.


        1. stardust_kid
          15.03.2017 13:14

          Отличной рекламой было бы сравнение с аналогичными книгами на рынке, и описание достоинств конкретного издания. Также неплохо было бы рассказать о полноте изложения и обоснованности выбора рекомендуемого автором технологического стека. Отказоустойчивости, соответствия современным реалиям и актуальности.
          Вы же как-то "ниачем" написали, в маркетологическом стиле.


          1. eveness
            15.03.2017 14:18

            Далека я от маркетинга и рекламы, увы (или к счастью). А стиль, получается, хреновый, первый блин комом, бывает. Хорошо, что моя работа не в том состоит, чтобы писать комментарии, которые одобряет сообщество. За совет спасибо.

            Если говорить про книги на русском, их и десяток не наберется, по стекам каким-либо еще меньше. Причину вы сами и указали, книги устаревают быстрее, чем выходят даже в оригинале, что уж говорить о переводе. Раньше вон справочники по языкам издавали, теперь же такого нет, это бессмысленно. Я давно уже не воспринимаю такие книги как строгое руководство, скорее как приглашение к изучению, когда сам уже решаешь надо оно тебе или нет, интересно и понятно или нет. А дальше классически — документация, песочницы, пет-проекты, какой-нибудь совместный opensource.


    1. stardust_kid
      15.03.2017 01:21
      +2

      Ага, устаревший по самое не могу Angular добавит вам много увлекательных часов отладки и чтения документации.


      1. eveness
        15.03.2017 11:25

        Да, там использовалась версия 1.2 и в рамках примера никаких проблем не возникло. Но Angular, старый или новый, лишь инструмент, суть в понимании возможностей. А много увлекательных часов отладки и чтения документации добавляет любая новая технология, когда начинаешь ее изучать. Тут уж, увы, своей головой придется думать, что выбирать, надо ли, и какую версию.


        1. stardust_kid
          15.03.2017 13:11

          Angular, старый или новый, лишь инструмент, суть в понимании возможностей.

          Так зачем мне книга об устаревшем инструменте? А для понимания возможностей достаточно табличку со сравнением посмотреть.


          А много увлекательных часов отладки и чтения документации добавляет любая новая технология, когда начинаешь ее изучать.

          Нет.


          1. eveness
            15.03.2017 13:52

            Так зачем мне книга об устаревшем инструменте? А для понимания возможностей достаточно табличку со сравнением посмотреть.
            Ну так-то вообще книги не нужны, посмотрел сравнительные таблицы и все понял. Главное знать места обитания правильных табличек, да. Это не сарказм, умение искать «правильную» информацию — тоже талант в современном мире.

            Нет.
            Возможно вам все кажется простым и понятным с первого раза, но у подавляющего большинства людей, изучающих что-то новое, возникают вышеуказанные проблемы. Не зря же процветает stackoverflow.


  1. XeL077
    14.03.2017 22:47
    +1

    Angualr js 1 или написали с использованием angular 2?
    Angular1 на больших проектах создавал раньше «проблему 2000», или ее уже исправили?


    1. Semigradsky
      15.03.2017 09:18

      Ну какой angular2 в 2015 году?


    1. sw0rl0k
      15.03.2017 09:18

      В оригинальной книге первый Angular. Логично, то и тут тоже.


  1. JackOfShadows
    14.03.2017 22:48
    +4

    Интересно, а почему русское издание вышло на 2 года позже английского? Сразу книгу решили не переводить, а почему решили издать сейчас?


  1. stardust_kid
    15.03.2017 01:21
    +4

    Книга, может, и хорошая, но безнадежно устарела.


  1. stardust_kid
    15.03.2017 13:30
    +2

    Обидно, что хорошее издательство потратило ресурсы на ветер. Не взлетит такая книга в 2017 году.


  1. JIghtuse
    15.03.2017 18:39

    Второе издание пишется, 3 главы доступно в MEAP. Это ли не показатель, насколько переводы могут отставать от оригинала.


  1. darkslave
    15.03.2017 22:14

    >> Стек MEAN включает в себя лучшие в своем классе технологии в данной области.
    вкусовщина – такая вкусовщина…


  1. evgenyj_kravchenko
    15.03.2017 22:14

    Ну когда уже будет перевод новой книги HeadFirst?


  1. gzhegow
    17.03.2017 08:31

    Кто знает меня по Тостеру — знает что я отношусь ко всему что нельзя обьянить школьнику с отвращением.
    Я купил эту книгу.

    Я безусловно буду читать ее дальше, чтобы получить из нее хотя бы крупицу пользы.

    Но вот размышляющим — не берите этот ужас. Первые 112 страниц книги состоят из кричащих заголовков, вида -ну теперь уж начинаем создавать программу- и вместо этого снова сцуко и снова, снова и снова рассказывается о том какой могучий стек мы выбрали с дибильными схемками вида -монитор стрелочка бд-.

    При этом уже на 60й странице автор пишет что вы не сможете легко работать с сайтами изза проблем продвижения которые будете решать кровью. Таким образом его резюме — используйте стек или для маленьких приложений или для рест апи или админок, либо для приложений с веб сокетами.

    Просто не забывайте что меан это очень круто просто сфера его применения с гулькин болт, но это очччень круто. Так что не забывайте регулярно думать о том что вы делаете чтото невероятно крутое но помните что над простейшими вещами вам придется долбаться часами, а когда придут сложные вещи то вы уже набьете руку.

    Типичная американская мотивационная научно-популярная книга. Дочитаю отпишусь