Автор оригинала: Christian Nwamba.
Ruby – это удивительный язык программирования и от моего опыта, проще всего учиться. Как веб-разработчик с рубиновым фоном, есть шансы, которые вы пишете JavaScript для лучшего приложения для пользователей. Вы умный разработчик Ruby (вы, вероятно, любите принцип сухой принцип), и именно поэтому вы используете Рельсы MVC Рамки для создания ваших приложений Ruby.
Ваша жизнь шел такой простой и счастливой, пока вы не начали чувствовать себя позади, потому что есть новый инструмент, который каждый использует и говорит о- Узел Отказ Исходя из исследований, вы поступили, чтобы понять, что узел просто JavaScript на сервере и из-за функций производительности он поставляется, у него есть Получил массивную популярность Отказ
Вместе мы собираемся приблизиться к узлу с точки зрения рельсов, чтобы ощутить знакомое. Паруса Следовательно, это основа узела, вдохновленная рельсами, поэтому с вашим Маленькие навыки JavaScript , мы построим приложение в узле, используя паруса при наличии на практике все, что мы знаем о архитектуре рельсов.
Эта статья структурирована таким образом, что основные концепции рельсов и парусов обсуждаются рядом, начиная с их Фон до их Отдых выполнение. У нас есть долгий путь, так что возьмите чашку кофе и расслабиться, чтобы мы могли получить лучшее время обучения.
Демонстрация проекта
Задний план
Рельсы
Рельсы написаны на языке программирования RUBY и созданы Дэвид Ханссон Отказ Рельсы были открытыми DAVID в 2004 году. Рамки были разработаны с использованием MVC ( модель просмотра моделей ), для лучшего разделения опасений. Это особенно сделало рельсы интуитивно понятные использовать, потому что до тех пор, пока разработчик комфортно с объектно-ориентированным программированием и шаблоном MVC, можно легко перепрыгивать на рельсы с основным пониманием концепций Ruby Conceptions и начать здание потрясающих веб-продуктов.
Паруса
Парусы написаны в JavaScript, именно Node.js. Payls Framework была создана Майк Макнейл и был вдохновлен рельсами. Этот факт, что паруса были вдохновлены рельсами, заставили их иметь много общего друг с другом – архитектура (MVC), структура каталогов, управление активами и т. Д. По этим причинам, если вы приезжаете с Rails и имеют основные навыки JavaScript, затем Вы хороши, чтобы начать писать узел приложений с парусами.
Руководители версий и установка
Руководители версий полезны, когда вы должны создать различные виды проектов на одной и той же машине и той же платформе, но требуют разных версий платформы. Например, вы можете иметь V.2.3 Ruby на вашей машине, но вы работаете с командой в данном проекте, который строго требует V1.9. Возможные решения для этого являются виртуальные машины (которые, конечно, являются жесткими на машинных ресурсах) или руководителям версий.
Имея в виду, что мы собираемся построить два проекта бок о бок на разных платформах (Ruby & Node), давайте установим их руководители версий:
Ruby (Rails)
Ruby известен как Ruby версии Manager (RVM) Отказ Чтобы получить RVM на нашей машине, нам нужно сначала установить автора Открытый ключ
:
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
Тогда мы можем продолжать установить RVM, используя Curl
:
curl -sSL https://get.rvm.io | bash -s stable
Вы можете запустить любую команду RVM для подтверждения установки:
rvm --help
С установленным RVM мы можем иметь несколько установок Ruby Versions, но давайте просто устанавливаем по умолчанию:
rvm --default install 2.3.1
Команда установки используется для установки конкретных версий и – по умолчанию
Флаг устанавливает конкретную версию по умолчанию.
Вы можете подтвердить установку, запустив:
ruby -v
Узел (паруса)
Узел известен как Узел версии Manager (NVM) Отказ Мы можем установить NVM
со следующим Curl
Сценарий:
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.7/install.sh | bash
Вам нужно добавить NVM на свой путь, используя:
# Add to path export NVM_DIR="$HOME/.nvm" # Load NVM [-s "$NVM_DIR/nvm.sh"] && . "$NVM_DIR/nvm.sh"
Мы хотим использовать последнюю версию узла, чтобы установить, запустить:
nvm install node
Теперь мы установили как Ruby, так и узел, наши платформы готовы.
Менеджеры пакетов
Повторное использование кода прекрасна, но больше нравится, когда вы повторно используете другие. В наши дни сообщество данной технологии рассчитывается с суммой вклада, сделанных в виду сообщество. При строительстве крупных проектов есть тенденция, которую вы собираетесь полагаться на решение других людей, чтобы улучшить ваши. То, как эти решения управляются и сохраняются в синхронизации, проходят через менеджеров пакетов.
Ruby (Rails)
Диспетчер пакетов Rails называется GEM
И вы можете установить любой GEM
Это полезно для вас, используя следующий синтаксис:
gem install
Например:
ruby install sass
Где Sass
это имя пакета, которое мы хотим установить.
Сама рельсов является GEM
Итак, мы устанавливаем его сразу:
gem install rails
Узел (паруса)
Менеджер пакета узла – NPM
И приходит, если мы устанавливаем узел. NPM
имеет много общего с GEM
:
npm install
Например:
npm install express
Паруса, как рельсы, также является узлом и может быть установлен с:
npm install -g sails
-G
Флаг рассказывает NPM
Чтобы установить паруса во всем мире, так что его можно установить только один раз и использовать для последующих проектов. Если -G
Флаг игнорируется, паруса могут быть установлены в каталоге команду была запущена, что может быть внутри папки с надписью node_modules.
Настраивать
Мы проходили через процесс подготовки для рельсов и проекта паруса, а теперь пришло время настроить его. Просто напоминание, мы построим тот же проект дважды. Один с рельсами и другим с парусами. Потому что мы идем с фона рельсов, мы сначала обрабатываем задачу в рельсах, а затем посмотреть, как мы можем завершить это в парусах.
Создать папку с именем CM-Rails-паруса
где см
обозначает Код наставника
Отказ Он находится в этом каталоге, что оба проекта будут жить.
Рельсы
Чтобы создать новый проект в Rails, внутри созданной папки, запустите:
rails new todo-rails
Паруса
Так же, как мы сделали для рельсов, в то же время CM-Rails-паруса
Папка, запустить:
sails new todo-sails
Инструмент командной строки
Проект эскафель и котельные могут быть действительно болью в черепе, потому что это повторяющийся процесс, который просто может выполнять мозг. Оба рамки предоставляют инструменты командной строки для проектов лесов (так же, как мы видели выше) и генерируем фигуры проекта, такие как контроллеры, модели и т. Д.
Перечисление всех команд для обоих рамок не имеет значения, потому что поверьте мне, вы никогда не запомните их один раз. Лучший способ изучить их – столкнуться с ними через процесс обучения.
Структура каталогов
Давайте посмотрим на структуру каталогов для обоих проектов, и посмотрим, что мы можем сделать из этого:
Рельсы
# Holds application core logic |--app # Truncated to show the MVC folders |----controllers |----models |----views |--bin # Executables |--config # Application specific configurations |--db # Seeds Schema Migrations |--lib |--log # Application log files |--public # Client facing contents |--test # App's test files |--tmp # Temporary contents like cache |--vendor # Third party libs from package managers |--Gemfile # Packages |--Rakefile # Application specific commands
Паруса
# Holds application core logic |--api # Truncated to show the MVC folders |----controllers |----models |--assets # Client facing contents |--config # Application specific configurations |--node_modules # Third party libs from package managers |--tasks # Application specific commands |--app.js # Entry |--Gruntfile.js # Grunt task for assets |--package,json # Packages
Парусы выглядят проще, что сделало бы его дружелюбнее подходить. Рельсы больше зрелищ, потому что оно было на некоторое время, а путь старше, чем паруса
Конфигурация базы данных
Мы оставим конфигурацию базы данных по умолчанию, которые будут оставить нас с SQLite
Для рельсов и диска для парусов:
Рельсы
# ./config/database.yml default: &default adapter: sqlite3 pool: 5 timeout: 5000 development: <<: *default database: db/development.sqlite3
Паруса
// ./config/connections.js localDiskDb: { adapter: 'sails-disk' },
Модели и миграции
Давайте посмотрим на слой данных MVC – M. Оба рамки используют тот же подход к генерированию моделей, но разница в том, что происходит под капотом:
Рельсы
rails generate model Todo owner:string text:string
Паруса
sails generate model Todo owner:string text:string
Как вы можете увидеть, единственное отличие – рельсы
и паруса
Отказ Обе команды генерируют следующие модели:
Рельсы
# ./app/models/todo.rb class Todo < ApplicationRecord end
# ./db/migrate/_create_todo.rb class CreateTodos < ActiveRecord::Migration[5.0] def change create_table :todos do |t| t.string :owner t.string :text t.timestamps end end end
Паруса
// ./api/models/Todo.js module.exports = { attributes: { owner : { type: 'string' }, text : { type: 'string' } } };
Паруса не требуют файлов миграции для определения его схемы. Схема данной модели определяется прямо внутри определения модели. Каждый файл модели должен экспортировать атрибуты
объект. Объект атрибутов определяет схему данной модели.
Рельсы требуют, чтобы вы мигрируете бегом:
rails db:migrate
С другой стороны, миграция не требуется для парусов. Waterline ORM, которая в том, что использует паруса, делает магию для вас, когда вы начинаете ударить в базу данных с запросами.
Маршрутизация
Маршрутизация – это ключевой аспект каждого веб-приложения, поэтому оба рельса и паруса принимают маршрутизацию вопросам в сердце. Давайте создадим несколько маршрутов на обоих проектах:
Рельсы
# ./config/routes.rb # Todo routes get '/todos', to: 'todo#index' get '/create', to: 'todo#new' post '/create', to: 'todo#create' # Home page root 'todo#index'
Мы создали четыре маршрута, которые будут обрабатываться Todo
Контроллеры, которые мы еще создаем. Теперь давайте посмотрим, как мы можем сделать то же самое в парусах:
Паруса
// ./config/routes.js module.exports.routes = { // Todo routes 'get /todos': 'TodoController.index', 'get /create': 'TodoController.new', 'post /create': 'TodoController.create', // Index page '/': 'TodoController.index' }
Паруса использует пары клавишных значений объекта, чтобы сопоставить методы действия контроллера к ее соответствующим маршрутам. Первое слово в клавишах описывает http глагол, который будет использоваться для ухода за этим запросом.
Контроллеры
У нас есть наш слой данных на месте, и наши маршруты определены. Следующее, что нужно сделать, это использовать контроллеры для обработки запросов, исходящих с маршрутов. При этом мы можем либо отправлять данные в качестве ответа или приема данных в качестве запроса с помощью наших моделей:
Рельсы
# ./app/controllers/todo_controller.js class TodoController < ApplicationController # index action method def index # View data @todos = Todo.all end # new action method def new end # create action method def create # Retrieve data from form body @todo = Todo.new(params.require(:todo).permit(:owner, :text)) # Persist @todo.save # Redirect to home page after persisting redirect_to '/' end end
Мы создали три метода действия для обработки наших маршрутов: индекс
, Новый
и создать
Отказ Первые два ручка получают запросы, поэтому Rails могут требовать презентационного слоя – вид. Мы будем решать это в ближайшее время. Последние ручки подчинения формы, поэтому никакое представление не требуется, скорее мы просто перенаправляем на домашнюю страницу.
Паруса
// ./api/controllers/TodoController.js module.exports = { // index action method index: function(req, res) { Todo.find().exec(function(err, todos) { if(err) throw err; // Render view with found todos res.view('todo/index', {todos: todos}); }); }, // new action method new: function(req, res) { // Render todo form res.view('todo/new'); }, // create action method create: function(req, res) { // Create a new todo using the Todo model Todo.create(req.body).exec(function(err, todo) { if(err) throw err; // Redirect if successful res.redirect('/'); }); }, };
Три метода, реализованные на рельсах, теперь доступны в нашем плановом проекте. индекс
Метод выбирает все Todos и оказывает вид с TODO. Новый
Метод просто отображает форму в файле с именем Новый
Отказ создать
Метод создает новый Todo и перенаправить на домашнюю страницу, если попытка была успешной.
Взгляды
Из предыдущего раздела, который мы обсуждали контроллеры, легко сделать вывод, что нам просто нужно два взгляда в приложении Todo-A, чтобы показать все TODOS, а другое, чтобы показать форму для создания TODO. На данный момент, если вы попытаетесь запустить с Rails Server
или Парус поднимает
, вы столкнулись с ошибками, которые пытаются сказать вам, что файлы представления шаблонов некуда можно найти. Давайте создадим их:
Рельсы
Rails Todos
Owner | Text |
---|---|
<%= todo.owner %> | <%= todo.text %> |
индекс
Просмотр циклов через данные просмотра, которые были переданы ему из контроллера и представлены данные с использованием таблицы.
<%= form_for :todo do |f| %><%= f.label :owner %>
<%= f.text_field :owner %><%= f.label :text %>
<%= f.text_field :text %><%= f.submit %>
<% end %>
Новый
Просмотр представляет форму, которую посты на /Создать
Маршрут, чтобы запрос можно обрабатывать методом создания действия в контроллере Todo.
Паруса
Todos
Owner | Text |
---|---|
<%= todo.owner %> | <%= todo.text %> |
То же самое мы видели в рельсах, применяются к парусам. На самом деле, шаблон двигатель для парусов, EJS
был вдохновлен шаблоном двигателя рельсов, Эрб
Отказ
Отдых (бонус)
Повторяющиеся услуги стали лучшим способом поступить при создании решений, которые будут потребляться различными платформами (PCS, мобильные телефоны, IOT и т. Д.). Прежде чем мы завершите наши обсуждения, давайте быстро посмотрим, как создавать конечные точки ресурсов для отдыха и как вернуть данные JSON, а не визуализацию:
Рельсы
Добавьте следующий маршрут в Rails Marable Config:
# ./config/routes.rb resources :todos
Когда мы этого сделаем, мы подаем с коллекцией маршрутов, которые способствуют созданию приложений для отдыха:
GET /todos(.:format) todos#index POST /todos(.:format) todos#create GET /todos/new(.:format) todos#new GET /todos/:id/edit(.:format) todos#edit GET /todos/:id(.:format) todos#show PATCH /todos/:id(.:format) todos#update PUT /todos/:id(.:format) todos#update DELETE /todos/:id(.:format) todos#destroy
Мы можем подтвердить это бегом:
rails routes
Если мы построили наше приложение таким образом, мы должны были бы вернуть JSON, а не просмотры в нашем контроллере методы действия:
def index @todos = Todo.all #Render data as JSON render :json => @todos end
Паруса
Дело совсем другое в парусах. Паруса использует автоматическое привязку к маршруту для спокойных услуг. Давайте посмотрим на себя. Запустить:
sails generate api Todo
Вышеуказанная команда генерирует модель ( todo.js
) и контроллер ( todocontroller.js
) для наших проектов. Но это еще не все. Как только мы создаем метод действий в контроллере, паруса автоматически связывает имя метода к маршруту, названному после действия. Например, если мы создам метод действий с именем Новый
Паруса создаст маршрут TODO/NEW
и связать это с Новый
Отказ
Также как то, что мы видели в рельсах, теперь мы можем начать возвращать JSON, а не визуальные просмотры:
index: function(req, res) { Todo.find().exec(function(err, todos) { if(err) throw err; // Render data as JSON res.json(todos); }); },
Последнее примечание
Мы старались максимально прикоснуться к основным понятиям MVC, сравнивая рельсы и паруса бок о бок. Вы попали в руки с этим, и держу пари, твои ноги влажные. По этой причине продолжайте создание приложений с узлом, используя инструмент, который заставляет вас чувствовать, что вы все еще пишете рельсы.
Вы обязаны столкнуться с проблемами, но сообщество широкое со многими экспертами, которые могут помочь вам, и в течение нескольких минут вы движетесь с идеальным решением. Удачи, написание больше JavaScript.