Парусные С Sails.js: Framework MVC-стиль для Node.js

Я делал программирования на стороне сервера с Symfony 2 и PHP, по крайней мере трех лет, прежде чем я начал видеть некоторые проблемы производительности с ним.

Не поймите меня неправильно, я люблю Symfony довольно много: Это зрелый, элегантный и профессиональный рамки.Но я понял, что слишком много моего драгоценного времени тратится не на бизнес-logicиз самого приложения, но на поддержку архитектуру рамках .

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

Sailing With Sails.js

Если вы разрабатываете сложное приложение с трехсот страниц документации для какой-то большой корпоративный клиент, и вы знаете, большинство его деталей от начала, то Symfony 2 или какой-либо предприятие Java рамках вероятно, будет самым лучшим инструментом для работы.Тем не менее, если вы являетесь разработчиком запуска или вы просто хотите проверить некоторые из ваших идей быстро без ущерба для общего qualityприложения, а затем Sails1(или Sails.js) является очень интересным кандидатом, чтобы рассмотреть .

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

Введение Link

Паруса является всеобъемлющим Рамки MVC-стиль Node.jsспециально разработан для быстрой разработки серверных приложений в JavaScript.Это надежный сервис-ориентированной архитектуры предоставляет различные виды компонентов, которые можно использовать, чтобы аккуратно организовать код и отдельные обязанности.И если вы дисциплинированы, то развивается приложение корпоративного уровня с ней можно даже .

Написанная в JavaScript, паруса дает дополнительное преимущество, которое позволяет поделиться кода между сервером и client,Это может быть очень полезно, например, для реализации проверки данных, где вы должны иметь те же правила проверки и в клиенте и на сервере.Кроме того, с парусами нужно освоить только один язык программирования, вместо нескольких .

Одним из основных концепция структуры является это обертывания стекслабосвязанных components,Почти каждый аспект системы настраивается: Вы можете добавлять, удалять или заменять большинство основных компонентов без ущерба для общей стабильности фреймворка.Другими словами, если вам нужно, чтобы работа была выполнена как можно быстрее, паруса поможет вам, предоставляя надежные встроенные компоненты с приемлемыми значениями по умолчанию;Однако, если вы хотите, чтобы создать полностью специализированное решение, паруса не стоять на вашем пути либо.Если вы уже знакомы с философией позади сообщества разработчиков Node.js, то вы получите то, что я имею в виду;если нет, то вы поймете в ходе этой статьи .

Под капотом, вероятно, содержит Паруса наиболее известный веб-фреймворк для Node.js, Express.Express2это очень просто, основной каркас.Это обеспечивает простое кости для ваших нужд веб-разработки.Для реализации серьезных веб-приложение с ним, вам нужно будет найти и объединить кучу сторонних компонентов самостоятельно.Кроме того, экспресс-на самом деле не волнует структурой кода или файловой системе проекта, так что вам нужно будет управлять, что и сами придумать разумный структуры.Вот где Паруса приходит на помощь.Построенный на вершине прочной конструкции Экспресс “, это предоставляет все необходимые компоненты из boxи дает разработчику хорошо продуманный организацию их кода и файлов проекта.С парусами, вы сможете приступить к разработке с встроенными и документально инструментов .

Я считаю, что лучший способ понять что-то, чтобы получить шутка о нем и изучить его воочию.Так, хватит разговоров.Давайте захватить codeи создать наш первый локальный проект

Приступая Link

Я начну с чистого листа.Давайте начнем с установки всех требований и последней версии самого паруса .

Я использую Ubuntu Linux, так что все команды будут представлены на этой ОС.Пожалуйста, измените их в соответствии с вашей рабочей среде .

Установите Node.js Link

Чтобы установить последнюю версию Node.js на вашем компьютере Ubuntu от NodeSource Node.js двоичных Distributions3, Просто запустите эти три команды:

# Make sure cURL is available in the system
sudo apt-get install -y curl

# Adding NodeSource repository to the system via provided script
curl -sL https://deb.nodesource.com/setup_dev | sudo bash -

# Actually installing the Node.js from the NodeSource repository
sudo apt-get install -y nodejs

Вы можете подтвердить, что Node.js был успешно установлен с помощью этой команды:

node --version

Следует вывести что-то, как v0.12.4.

Примечание: Если вы не используете Ubuntu, то, пожалуйста, инструкции см Joyent наустановка Node.js на другом platforms4.

Установите паруса Link

Следующая команда установит паруса глобально:

sudo npm -g install sails

Вы можете проверить, был ли установлен каркас с этой командой:

sails --version

Это выведите номер последней стабильной версии Парусов .

Создать Link

Давайте создадим тестовый проект, который мы будем экспериментировать с:

sails new sails-introduction
cd ./sails-introduction

Начать Link

Наиболее интересным аспектом Node.js является то, что приложение не требует внешнего веб-сервера, чтобы работать.В мире Node.js, приложение и веб-сервер и то же.При запуске приложения паруса, он связывается с данного порта и слушает HTTP запросов.Все запросы обрабатываются в одном процессе ОС последовательно приложением.(В отличие, Apache будет порождать множество суб-процессы или темы, и каждый запрос будет иметь свой собственный контекст пространства.)

Итак, как можно ваше приложение обслуживать несколько запросов без эти запросы заметно блокируют друг друга?Ключом к этому является одним из основных особенностью Node.js: asynchronosity,Все тяжелые операции, такие как I / O и доступ к базе данных, выполняются в неблокирующем асинхронном режиме.Каждый асинхронный метод позволяет определить функцию обратного вызова, которая активируется, как только завершается запрошенная операция.Результат операции (или об ошибке), передаваемого на вашей функции обратного вызова.Таким образом, ваше приложение может делегировать все тяжелую работу и продолжить ее собственного бизнеса, возвращаясь поздно, чтобы собрать результаты и продолжить, где она была прервана .

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

Давайте начнем наш проект, чтобы увидеть, что все работает нормально.Просто проделайте следующее:

sails lift

Паруса будет инициализировать приложение, привязать к указанному порту и начать прислушиваться к HTTP-запросы .

Примечание: Когда приложение поднимается, окно терминала будет заблокированном состоянии.Вы можете нажать Control + CДля завершения работы приложения и вернуться к командной строке .

Теперь ваша очередьсмогут открыть приложение по умолчанию в вашем любимом браузере, посетив HTTP: // локальный: один тысяча триста тридцать семь / 6.

В этот момент, страница по умолчанию должны правильно загрузить .

Погружение в паруса Link

Теперь, давайте проанализируем наш проект, чтобы понять, что делает его галочкой

Паруса является основой MVC, так, начиная с этих компонентов, чтобы увидеть то, что склеивает их вместе смысл .

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

Компонент маршрутизации Link

Когда паруса получает запрос HTTP, он фактически использует свой компонент маршрутизатора, чтобы найти контроллер, ответственный за создание ответа.Маршрутизатор соответствия можно управлять с помощью специального конфигурационного файла, расположенного на config/routes.js,Если вы откроете этот файл, вы увидите, что он содержит только одну запись:

module.exports.routes = {
  '/': {
    view: 'homepage'
  }
};

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

Левая часть выражения, '/', Это адрес, который говорит модель паруса, что следующая конфигурация (правая часть) должны быть использованы для страницы индекса.Оператор viewсвойство конфигурации содержит homepageзначение, которое является именем мнению (клиновые в MVC) .

Просмотров слой Link

Просмотров обрабатываются отдельным компонентом рамок.С помощью “Консолидация” Node.js пакета, паруса поддерживает по крайней мере, 31 различных шаблонов languages7,Так, выберите язык, который наиболее подходит для вас, ваш проект и свою команду .

Все шаблоны находятся в viewsдиректории вашего проекта.Вы найдете там выше views/homepage.ejsФайл шаблона, который используется для визуализации домашнюю страницу, и вы можете играть с ним, если вам нравится .

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

Если вы посмотрите на homepage.ejsшаблон, вы заметите, что это не полная.Это не хватает основных элементов HTML, например, DOCTYPEhtmlheadbodyтэги.Это не случайно.Наиболее многоразовые части шаблона извлекаются в отдельном файле шаблона, views/layout.ejs,Название шаблона макета выполнен в config/views.jsподать (посмотрите на layout собственности).Это действительно помогает держать вещи СУХОЙ.Тем не менее, если вам нужно использовать другую раскладку по какой-то конкретной странице, Вы можете легко переопределить свойство динамически в контроллере .

Имейте в виду, что эта конфигурация макет работает только для EJS систему шаблонов по умолчанию и не будет работать с другими языками.Это делается с целью legacy- и обратной совместимости.Использование функции макета, предоставленную шаблонов языке по вашему выбору рекомендуется.Например, в Twig и jinja2, вы можете использовать extendsВыражение расширить шаблон родительского и перегрузки требуется блоки .

Использование пользовательских Просмотров Двигатель Link

В этом разделе показано, как изменить взгляды двигатель, который используется для визуализации шаблоны паруса.Это должно дать вам представление о том, как легко некоторые части паруса может быть изменено и настроены.Я собираюсь использовать язык шаблонов Twig / jinja2, из-за его гибкости и расширяемости.Я использую его в течение по крайней мере трех лет, и язык никогда не ограничивается меня в любом случае.Так, я настоятельно рекомендую вам попробовать его .

Примечание: Сучок и jinja2 являются общим семейство шаблонов, языки с той же функциональностью и особенностями основного.Тем не менее, каждый конкретный реализация может иметь свои собственные небольшие различия и ароматы.Я буду использовать библиотеку глоток в ходе настоящей статьи.Она обеспечивает конкретную реализацию шаблонного синтаксиса Twig и jinja2 для Node.js.Пожалуйста, см Официальный documentation__7 глоток в |8подробнее .

Как я сказал ранее, паруса делегаты смотреть оказания пакета Node.js под названием “Консолидация”. Этот пакет на самом деле объединяет около 30 различных просмотра двигатели.Я буду использовать двигатель вид глоток, который реализует поддержку Twig и jinja2 языках шаблонов.Чтобы его использовать, мне нужно будет выполнить несколько простых шагов:

  1. Определить зависимостей и установить пакет глоток: npm install --save swig.
  2. Изменение конфигурации паруса ‘немного редактированием config/views.jsфайл.Все, что вам нужно сделать, это установить engineнедвижимость в swig.
  3. Перепишите все шаблоны из формата EJS в Twig и jinja2.Не забудьте изменитьрасширение .swig!
  4. Обновить паруса сервер .

Примечание: Для того, чтобы увидеть изменения, вы должны будете перезагрузить приложение, о прекращении сервер, а затем подняв его снова .

ответить на Stack Overflow9дает несколько советов о том, как это может быть автоматизировано .

Содержание для всех измененных файлов приведены ниже для вашей справки .

Config / views.js:

module.exports.views = {
  engine: 'swig'
};

Просмотров / layout.swig:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>{{ title|default('The Default Title') }}</title>
  </head>
  <body>
    {% block body %}{% endblock %}
  </body>
</html>

Просмотров / homepage.swig:

{% extends 'layout.swig' %}
{% set title = 'Homepage Title' %}
{% block body %}
  <h1>Homepage!</h1>
  <p>Welcome to the homepage!</p>
{% endblock %}

Просмотров / 404.swig:

{% extends 'layout.swig' %}
{% set title = 'Page Not Found' %}
{% block body %}
  <h1>{{ title }}</h1>
{% endblock %}

Содержание для 403.swigи 500.swigпочти такой же, как для 404.swigпредставлены выше.Я оставлю это для вас, чтобы исправить файлы себя .

Контроллер Link

Хорошо, мы смотрели в маршрутах и ​​просмотров компонентов, но где контроллер часть MVC, спросите вы?Собственно, проект паруса умолчанию это так просто, что он не требует каких-либо логику.Если вы открываете api/controllersКаталог, вы увидите, что он пуст .

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

Давайте создадим новый контроллер для нашей домашней странице с помощью следующей команды:

sails generate controller homepage

Паруса будет генерировать файл для вас, api/controllers/HomepageController.js.

Мы можем открыть этот файл и ввести новое действие для нашей домашней странице.Я буду называть это index:

module.exports = {
  index: function (request, response) {
    return response.view('homepage', {
      currentDate: (new Date()).toString()
    });
  }
};

Это простое действие просто оказывать нашим homepageмнение, что мы обсуждали ранее, и пройти дополнительную переменную он призвал currentDate, Который будет содержать текстовую презентацию текущей даты .

Примечание: Действия контроллера является простой функцией JavaScript, который принимает два аргумента: специальные requestи responseобъекты.Эти объекты соответствуют непосредственно к объектам, предусмотренных рамках экспресс.Пожалуйста, посмотрите на Экспресс “documentation10для деталей API .

Для того, чтобы на самом деле использовать паруса нашего контроллера, нам нужно немного изменить конфигурацию маршрутизации в config/routes.jsфайл:

module.exports.routes = {
  '/': 'HomepageController.index'
};

Здесь мы говорим систему, чтобы дать контроль над запрос на наш HomepageControllerи, в частности, его indexдействия.Теперь, контроллер отвечает за обработку запроса и генерации ответа .

Кроме того, не забудьте добавить следующую строку вviews/homepage.swig:

<p>Current date is: {{ currentDate }}</p>

Это будет оказывать даты строку, переданную от контроллера .

Теперь, перезагрузите сервер и обновите страницу.Вы должны увидеть изменения .

Теневые Маршруты для действия Link

По умолчанию, паруса будет генерировать implicitмаршруты (также называемые | shadow__11 маршруты) для каждого действия контроллера.Созданный сайт будет выглядеть /:controller/:action,В нашем случае это будет HTTP: // локальный: один тысяча триста тридцать семь / Главная / index11,Хотя, эта функция может быть полезна, иногда это не требуется (например, когда вы получите два адреса для главной страницы, как в нашем случае) .

Вы можете управлять этим процессом, изменяя blueprintsкомпонент, который может быть сделано в два места.Первое и самое очевидное место является config/blueprints.jsФайл конфигурации.Вы можете отключить теневые действия маршруты для всего приложения, установив actionsвоз …

Если вы хотите прочитать полностью статью, посетите сайт наших спонсоров

Comments are closed.