Рубрики
Без рубрики

Создание простых API с Nodejs, Expressjs и PostgreSQL DB – 2

В этом посте я объясню, как подключиться и использовать базу данных [postgresql] (https://www.postgresql.org/) для хранения входных данных, а не в зависимости от объекта JavaScript, мы использовали частично 1. «Всегда есть один Больше ошибок исправить. ” Эллен Уллман

Автор оригинала: Olawale Aladeusi.

«Всегда есть еще один ошибок». Эллен Уллман

Этот учебник – это продолжение, откуда мы остановились с последнего поста. Если вы не прочитали мой предыдущий пост, пожалуйста, сделайте. Нажмите здесь, чтобы прочитать мой пост на создании простых API с Nodejs, Expressjs и структурой данных JS, чтобы сохранить данные.

В этом посте я объясню, как подключиться и использовать PostgreSQL База данных для хранения данных ввода в отличие от JavaScript Object DataType, мы использовали частично 1. Мы также узнаем, как написать некоторые основные [SQL] (язык запроса в структуре). SQL – это стандартный язык для хранения, манипулирования и извлечения данных в базах данных. SQL в основном является единственным языком, который вы можете использовать в запросе данных в базе данных.

Чтобы сделать это просто и так, чтобы мы могли лучше понять, как работает SQL, я не собираюсь использовать ORM (объект реляционного сопоставления) в этом посте. Проверьте это Ответ на Stackoverflow Чтобы лучше понять ORM. ORM в основном является техникой, которая позволяет нам запросить и манипулировать данные из базы данных с небольшим или нулевым знанием SQL. Пакеты ORM выставляют некоторые методы, необходимые для запроса и манипулирования данными в базе данных. У нас есть несколько пакетов ORM, которые можно использовать с нашей базой данных e.g Sequelize Отказ Вместо использования ORM мы будем использовать PG Пакет Nodejs напрямую – PG – это пакет Nodejs для взаимодействия с базой данных PostgreSQL. Использование PG Один также даст нам возможность понять некоторые основные запросы SQL, поскольку мы будем запрашивать и манипулировать данными в БД, используя RAW SQL-запросы.

Начиная

Установить PostgreSQL в вашей системе. Чтобы проверить, был ли прогресс был успешно установлен, запустите Какой PSQL от терминала

Снятый экран 2018-08-11 в 5.15.44 PM.PNG

Теперь давайте сделаем несколько твиков нашей структурой проекта. Создайте две новые папки в SRCИспользованиеJSObject и Использование DDB Отказ Переместите предыдущие папки в SRC к ИспользованиеJSObject папка.

Далее создайте две новые папки внутри Использование DDBКонтроллеры и дБ Отказ Создать Отражение. Джей файл js в контроллер папка и index.js в дБ папка.

Далее, создайте db.js и .env в корневом каталоге проекта.

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

project
 |-src
   |-usingDB
     |-controllers
       |-Reflection.js
     |-db
       |-index.js
   |-usingJSObject
     |-controllers
       |-Reflection.js
     |-models
       |-Reflection.js
 |-.babelrc
 |-.env
 |-db.js
 |-package.json
 |-server.js

Наконец, нам нужно установить PG и Доценв (Нам нужно это загрузить нашу среду переменные из .env ) Пакеты.

Запустите следующую команду, чтобы установить два пакета

$ npm install --save pg dotenv

Настройте базу данных

Создать базу данных Пусть создать нашу БД и назовите его Отражение_ДБ Отказ Чтобы создать БД, мы можем использовать любой PostgreSQL-клиент, такой как Постико И мы также можем создать БД непосредственно из терминала, используя GUSEDB команда.

  $ createdb reflection_db

использовать \ l Чтобы проверить список доступных БД из терминала

  $ psql
  -# \l

Вы должны увидеть что-то похожее на это

Снятый экран 2018-08-11 в 5.33.33 PM.PNG

Создать отражения стола Сначала позвольте сохранить URL-адрес базы данных в системной среде. URL-адрес базы данных должен быть в следующем формате Postgres://{db_username}: {db_password} @ {host}: {port}/{db_name} E.G postgres://olawalequest @ 127.0.0.1: 5432/Refreics_DB Отказ

Если вы не смогли установить дБ локально, простой выход – использовать любые PostgreSQL Cloud DB, например ElephinSakl Отказ Если вы используете Cloud PostgreSQL DB, скопируйте URL и используйте его вместо этого.

Сохраните URL DB в .env Файл, расположенный в корневом каталоге.

#.env
DATABASE_URL=postgres://olawalequest@127.0.0.1:5432/reflect_db

Далее нам нужно создать Размышления стол в нашей БД. Это где мы начнем использовать PG Пакет с базовым запросом SQL для создания таблицы.

Скопируйте и вставьте следующее в db.js В каталоге проекта

alt.

Шаги кода:

  • Импорт Бассейн объект из PG Отказ Проверьте pg Документация Подробнее на объединение Отказ Мы используем это для подключения к нашей PostgreSQL DB. Бассейн является самым простым и распространенным способом использования PG. Вы также можете использовать их клиент API для подключения к БД.
  • Импорт Доценв от Доценв и загрузить его, используя dotenv.config () – Что это делает для поиска .env Файл в нашем проекте и загрузите его содержимое в системную среду, чтобы мы могли использовать узел Process.env Для доступа к этим переменным.
  • Мы создаем новый экземпляр Бассейн и пройти в ConnectionString к его конструктору. Мы используем process.env.database_url чтобы получить База данных_url переменная из системной среды.
  • Мы слушали бассейн соединить Событие и консоль журнала подключен к БД
  • Мы создали CreateTables () Функция внутри функции – это запрос, который создает Размышления стол со следующими полями; ID – UUID DataType, Успех – Текстовый DataType, low_point – Текстовый DataType, take_away – Текстовый DataType, create_date – Timestamp DataType и modified_date – тип данных.
  const queryText =
    `CREATE TABLE IF NOT EXISTS
      reflections(
        id UUID PRIMARY KEY,
        success TEXT NOT NULL,
        low_point TEXT NOT NULL,
        take_away TEXT NOT NULL,
        created_date TIMESTAMP,
        modified_date TIMESTAMP
      )`;

Что вышесказанное означает сообщить PostgreSQL DB для создания Размышления стол, если Размышления Таблица не существует с перечисленными полями.

  • Мы называем Бассейн Способ запроса с QueryText как аргумент, и он возвращает Обещанный Отказ Мы позвонили Pool.end () закрыть Бассейн Подключение к БД.
  • Мы создали другую функцию под названием droptable () – Что это делает, чтобы удалить Отражение Таблица. Мы создали новый запрос Капля стола, если существует отражения Этот падение отражений стол, если она существует в БД.
  • Мы используем pool.on («Удалить») слушать Бассейн Удалить Событие и использование Process.exit (0) Чтобы выйти из процесса узла.
  • Наконец, нам требуется Make-Runnable Пакет – нам нужно, чтобы это могло позвонить и любую из наших двух функций от терминала. Примечание. Вы должны потребовать Make-Runnable в конце. Кроме того, не забудьте установить Make-Runnable как проект dev-зависимость. Вы также заметите, что мы использовали требуется вместо Импорт это потому, что мы хотим только бежать db.js Файл из одного терминала, и он не является непосредственно частью нашего проекта, поэтому нет смысла в том числе.

Наконец, давайте запустим CreateTables Функция для создания наших Размышления Таблица. Используйте следующую команду

$ node node db createTables

После запуска выше, вы должны что-то похожее на ниже

Снятый экран 2018-08-11 в 9.15.12 PM.PNG

ПРИМЕЧАНИЕ. Вместо того, чтобы перейти через вышеуказанный процесс, вы также можете создавать таблицы непосредственно либо использовать любой клиент PostgreSQL или использование команд PostgreSQL на терминале.

Настройка контроллера

Скопируйте следующее и вставьте его внутри SRC/Использованиеdb/db/index.js

alt.

Шаги кода:

  • Мы создали новый метод Запрос который принимает два аргумента текст – Запрос текста и Пармы – Значения, требуемые по текст Отказ Эти два аргумента – это то, что необходимо для запроса БД. Метод возвращает обещание, и мы назовем это в нашем контроллере. Нажмите здесь Подробнее о обещании JavaScript.

Чтобы сделать наш контроллер простой, он будет содержать те же пять методов, созданных в предыдущем уроке, но мы настроим его содержимое, чтобы получить значения из БД.

Скопируйте и вставьте следующее внутри SRC/ИспользованиеDB/Контроллеры/Размышления.js

alt.

Шаги кода:

  • Здесь мы создаем Отражение объект с пятью методами – Создать () , getall () , getOne () , Обновление () и Удалить () Отказ Мы также используем Async/await Отказ
  • Создать () – Мы импортировали нашу БД из SRC/ИспользованиеDB/DB/index.js Отказ Для нашего запроса SQL мы использовали Вставить в отражения (List_Columns_here ..) Значения ($ 1, $ 2, $ 3, $ 4, 5, $ 6 ...) – Что это делает, создает новый ряд в Размышления таблица и вставьте прилагаемые значения в его поля. Значения это массив значений, которые содержат то, что мы хотим вставить в таблицу. Элементы внутри Значения Массив должен быть в том же порядке, что и $ 1, $ 2, $ 3, $ 4, 5, $ 6 Отказ Мы использовали Возвращение * Чтобы вернуть созданный строк. Помнил, что мы создали Запрос Метод, который принимает в два аргумента текст и Пармы внутри SRC/ИспользованиеDB/DB/index.js Это где мы будем использовать его. Мы назвали методом и отправить CreateQuery и значения в качестве параметров. С db.wary возвращает обещание, мы используем Async/await Чтобы наш код выглядит Сладкий Отказ
  • getall () – Мы настроили Выберите * из размышлений Чтобы получить все строки в столе отражений
  • getOne () – Мы используем Выберите * из отражений, где ID = 1 $ Чтобы получить один ряд от стола отражений, где ID указан указанный идентификатор.
  • Обновление () – Чтобы обновить размышление, мы вправели DB дважды – первый – получить конкретную строку, пользователь хочет обновить, а второе запрос DB обновит ряд на основе нового ввода от пользователя. Мы используем Обновление Размышления Установить УСПЕХА = 1 $, LOW_POINE = $ 2, TINE_AWY = $ 3, MODIDIDED_DATE = $ 4, где ID = 5 $ возвращается * обновить определенную строку в таблице.
  • Удалить () – Мы используем Удалить из отражений, где id = $ 1 возвращается * Чтобы удалить строку в столе отражения, используя строку я бы

Обновить Server.js.

Нам нужно понять способ переключаться между использованием того, что мы сделали в предыдущий пост или используя БД. Лучший способ, которым я мог придумать, это добавить Тип в переменной окружающей среды. Мы будем использовать это, чтобы проверить, что использовать для приложения. Если Тип === БД Мы воспользуемся тем, что мы сделали в этом посте и если Тип === jsobject Мы будем использовать то, что мы сделали на предыдущем посте. Теперь поставить Тип = БД Внутри вашего .env – Ваш .env должен содержать две переменные сейчас База данных_url и Тип Отказ

Обновите свой server.js со следующим

// server.js
import express from 'express';
import dotenv from 'dotenv';
import 'babel-polyfill';
import ReflectionWithJsObject from './src/usingJSObject/controllers/Reflection';
import ReflectionWithDB from './src/usingDB/controller/Reflection';

dotenv.config();
const Reflection = process.env.TYPE === 'db' ? ReflectionWithDB : ReflectionWithJsObject;
const app = express()

app.use(express.json())

app.get('/', (req, res) => {
  return res.status(200).send({'message': 'YAY! Congratulations! Your first endpoint is working'});
});

#####################
# Existing Code     #
#####################

app.listen(3000)
console.log('app running on port ', 3000);

Шаги кода:

  • Мы установили Babel-Polyfill Пакет NPM и импортировал его – нам нужно это здесь, так что появление узла узнает Async/await и Обещание Отказ
  • Так как нам нужно загрузить/получить Тип к/из системной среды, мы используем Доценв сделать только это и Process.env.type используется для получения его значения.
  • Мы используем JavaScript Ternary Operator для установки значения отражения. Что это Process.env.type? ReflictionWithDB: ReflectionWithJSObject; в основном это должно назначить ОтражениеWithDB к Отражение Если Тип или назначить ОтражениеWithJSObject иначе.

УРА!!!! Запустите и протестируйте все ваши конечные точки.

Заключение

В этом руководстве мы узнали, как подключить приложение нашего узла к PostgreSQL, и мы также узнали, как запросить и манипулировать данными в БД. Пожалуйста, проверьте часть 1 этого поста здесь, если вы этого не сделали.

Проверьте полный код здесь

Как всегда, бросьте свои вопросы и комментарии. Не забудьте понравиться и поделиться этим постом, если вы узнали одну или две вещи.