WordPress рекламирует впечатляющую «5-минутную» установку, позволяющую клиенту и разработчику погрузиться в среду, в которой будет работать конечный пользователь. Я хотел иметь возможность разместить приложение где-нибудь на сервере, чтобы показать его своим друзьям, без необходимости придумывать, как просто вывести текст на экран. Итак, чтобы свести все к минимуму, чтобы Тими в будущем мог понять и украсть, давайте рассмотрим создание и развертывание приложения Node на Heroku.

Это предполагает, что у вас установлен Heroku toolkit и учетная запись Heroku. Вы можете проверить репозиторий, если вам просто нужен код

Сначала мы создаем папку проекта, может быть что-то вроде super-sweet-node-app или что у вас есть. Внутри этой папки, которую мы с этого момента будем называть корневая/корневая папка, запустите npm init -y, чтобы мы могли использовать пакеты NPM. Кстати, давайте установим два пакета, которые мы будем использовать: express и marked-engine.

$ npm install — save express marked-engine

И теперь, когда у нас есть детали, давайте заставим их работать. Во-первых, давайте создадим основные файлы, которые нам всегда нужны:

$ touch server.js .gitignore README.md LICENSE.md

Мы хорошие разработчики, поэтому привыкли использовать git сейчас, на ранней стадии. Поместите файлы, которые вы хотите, чтобы git не отслеживал, или каталоги внутри .gitignore. README и LICENSE не являются обязательными, но это заставляет вас выглядеть круто, так что можете их использовать.

Внутри server.js давайте создадим экземпляр экспресс-сервера, который сообщает нам, когда он запускается.

var express = require('express');

var app = express();

var PORT = process.env.PORT || 5000;

app.listen(PORT, function(val){
  console.log('I am listening on the port ' + PORT);
  console.log('this callback received val as ' + val);
});

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

$ node server.js

Вводить все это было бы трудоемко, а мы ленивы, особенно когда дело доходит до добавления множества флагов или других действий в консоли. Давайте абстрагируем эту команду в нашем файле package.json.

...
“scripts”: {
 “test”: “echo \”Error: no test specified\” && exit 1", 
“start”: “node server.js” },
...

Теперь вы можете

$ npm start

и он запустит сервер для нас локально. Но это довольно скучно, когда мы ничего не отправляем клиенту. Давайте сделаем то, чему нас учит каждый язык и фреймворк: Привет, мир!

app.get('/', function(req, res){
  res.send('Hello world!');
});

Поместите это где-нибудь после app = express(), и когда вы зайдете на localhost:5000, вы должны получить Hello world! печать в браузере. Довольно круто, но что, если я хочу отправить файл уценки вместо статического текста? Вот где в игру вступает marked-engine. Измените свой код, чтобы сообщить нашему экспресс-серверу, какой движок ему нужно использовать, и сообщите ему, чтобы он использовал будущий файл с именем TUTORIAL.md.

...

app.engine('md', require('marked-engine').renderFile);

...

app.get('/', function(req, res){
  res.render('TUTORIAL.md');
});
...

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

$ mkdir views && touch views/TUTORIAL.md

Теперь давайте заполним этот файл некоторой уценкой. Вы можете написать свой собственный или скопировать его из моего репозитория. Теперь запустите npm start и убедитесь, что TUTORIAL.md отображается на экране.

Как только вы это сделаете, давайте добавим и зафиксируем в git, чтобы обновить его с нашими файлами. Убедитесь, что у вас есть node_modules внутри вашего .gitignore.

$ git add — all
$ git commit -m “App finished”

Внутри вашей корневой папки запустите

$ heroku create

Как только это будет сделано, давайте отправим наш код на рабочий сервер.

$ git push heroku master

Это развернет наши файлы и приложение на сервере Heroku. Он будет использовать пакеты, установленные с флагом — сохранить, для создания среды. Когда он будет завершен, вам будет предоставлен URL-адрес. Если вы перейдете по этому URL-адресу, вы должны увидеть то же самое, что и при посещении localhost:5000, если он запущен локально.

И вот оно! Самый простой способ запустить экспресс-сервер на размещенном сервере. Heroku имеет гораздо больше инструментов и предлагает гораздо лучшие учебные пособия, чем это, для каждого шага пути.

Но, как сказал один мудрый человек: как только вы чему-то научились, создайте учебник о том, как это делать.

Был ли я неправ в чем-то из этого? Есть ли явные ошибки, которые я слишком зеленый, чтобы понять? Откройте вопрос в github repo или отправьте мне твит. Помогло ли это и хотите помочь другим? Нажмите на маленькое милое сердечко ниже и поделитесь им!