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

Раздел 0: (Потому что все обнуляется.) Прежде всего, поздравляю. Вы прошли долгий путь от объявления своей первой переменной. Вы когда-нибудь думали, что создадите полнофункциональное приложение, которое будет запрашивать вашу собственную базу данных? Теперь вы здесь и готовы поделиться этим с миром. Цените это.

Раздел 1. Спецификации, которые я использовал:

Мой терминал: о-мой-зш. Bash будет работать одинаково хорошо.

Серверная часть написана на Node.js, с Express в качестве маршрутизатора и ejs в качестве языка шаблонов.

База данных PostgreSQL, и я использовал pg-promise для подключения к ней. Я также использую Postico в качестве инструмента с графическим интерфейсом для Postgres, поэтому я могу одержимо обновлять его и видеть, как мои пользователи заполняют базу данных в режиме реального времени.

Управление сеансом происходило с помощью express-session и connect-pg-simple, и я хранил свои сеансы в отдельной таблице в своей базе данных.

Наконец, я использовал git и Github в качестве контроля версий, и это довольно неотъемлемая часть того, как мы собираемся развертывать на Heroku.

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

Раздел 2. Подготовка приложения к первому дню в школе…

В вашем проекте есть файл .env?

Если это так, и вы знакомы с переменными process.env, вы, вероятно, можете немного прокрутить. В противном случае это важно!

Файл .env скрывает переменные process.env в вашем проекте. Вы НЕ передаете этот файл в git, никогда. Создайте его в корне вашего проекта, а затем сразу же перейдите в свой файл .gitignore (если у вас его нет, создайте его сейчас, также в корне, и введите node_modules без кавычек в качестве первой строки) и поместите свой .env файл там.

Ты вернулся? Хорошо! npm install dotenv, а затем потребовать его в ОЧЕНЬ ВЕРХУ вашего основного файла server.js следующим образом: require('dotenv').config() Обратите внимание, что вы должны вызвать config в конце инструкции. Вам не нужно назначать это переменной, как это требуется в большинстве других случаев.

Существует по крайней мере один, который вам нужно будет создать, и он имеет стандартное имя. Он называется process.env.DATABASE_URL , и заглавные буквы там сделаны намеренно. Строка подключения, которую вы использовали для подключения к pg или pg-promise, вероятно, выглядит так: postgres://localhost:5432/yourproject

Теперь вы захотите изменить эту строку на эту:

const db = pgp(process.env.DATABASE_URL || "postgres://localhost:5432/yourproject")

И в вашем файле .env сделайте следующее:

process.env.DATABASE_URL="postgres://localhost:5432/yourproject"

Вот почему, в двух словах. На вашем локальном хосте вы говорите программе либо перейти к вашему файлу .env, чтобы найти строку подключения, либо в случае сбоя вернуться к жестко запрограммированной версии. Вы можете опустить «или» и просто направить строку подключения в файл .env, и пока все настроено, все в порядке. Проверьте его в любом случае, и он должен работать. Тогда почему это важно? Heroku устанавливает свой собственный process.env.DATABASE_URL в строку подключения, которая вам понадобится для подключения к базе данных на их серверах, и этот фрагмент кода позволяет без проблем запускать ваше приложение на локальном хосте или Heroku.

Если вы использовали экспресс-сеанс или аналогичный пакет, у вас будет секрет сеанса внутри объекта сеанса. Обычно это выглядит так:

app.use(session({
  store: new pgSession({
    conString: process.env.DATABASE_URL || "postgres://localhost:5432/yourproject",
  }),
  key: 'user_sid',
  secret: process.env.SESSION_SECRET,
  resave: false,
  saveUninitialized: false,
  cookie: { maxAge: 10 * 10 * 6000000 },
}));

Если new pgSession выглядит незнакомым, это простое соединение с pg, и ваша конфигурация может отличаться. В любом случае, если ваш секрет раскрывается в вашем приложении, измените его также на переменную process.env: process.env.SESSION_SECRET="macandcheese4ever"

Вау! Мы закончили с этим. Другие важные мелочи, которые могут привести к тому, что ваше приложение выйдет из строя при развертывании: 1) Если вы делаете вызов AJAX/Fetch к API, убедитесь, что вы используете https вместо http. 2) Проверьте свои абсолютные и относительные пути. 3) Я уверен, что их больше, но мы узнаем, как их обнаружить с помощью heroku logs . Спойлеры!

Далее — Часть 2, в которой мы начинаем работу с Heroku и выполняем некоторые сценарии Bash! Обещаю, это не повредит…