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

Настройка спокойного API с Node.js и PostgreSQL

Настройка спокойных API с Node.js и PostgreSQL чрезвычайно важным … Теги с узлом, WebDev, JavaScript, Postgres.

Чрезвычайно важный аспект современного веб-разработчика – знать, как работать с API для облегчения связи между различными программными системами.

В этом руководстве вы узнаете, как создавать собственные спокойные API в среде Node.js, работающей на Express Server и используя базу данных PostgreSQL.

Предварительные условия

Чтобы получить максимальную отдачу от этого учебника, есть несколько предпосылок:

  • Вы должны быть знакомы с помощью синтаксиса JavaScript и основами
  • Вы должны иметь базовые знания о работе с командная строка
  • Вы должны иметь Node.js и npm установлены

Цели

К тому времени, когда вы завершите эту статью, у вас должен быть полностью функциональный сервер API, работающий на экспресс-каркасе в Node.js. API должен иметь возможность обрабатывать методы HTTP-запроса, которые соответствуют базе данных PostgreSQL, из которых API получает свои данные. Вы узнаете, как установить PostgreSQL и работать с ним через интерфейс командной строки.

Что такое спокойный API?

Остальные стоят за Re презентационный S делать T RANSFER и определяет набор стандартов для веб-сервисов. API – это интерфейс, который разные программные программы используют для взаимодействия друг с другом. Следовательно, восстановленное API является API, который соответствует остальным архитектурному стилю и ограничениям. Системы отдыха являются нестандартными, масштабируемыми, кешируемыми и имеют единый интерфейс.

Restful API наиболее часто используют HTTP-запросы. Четыре из наиболее распространенных HTTP-методов получают, пост, поставить и удалить, которые являются методами, с помощью которых разработчик может создать систему CRUD – создать, чтение, обновление, удаление.

PostgreSQL База данных

PostgreSQL Обычно называют Postgres, представляет собой бесплатную и открытую систему управления реляционными базами данных. Вы можете быть знакомы с несколькими другими аналогичными системами базы данных, такие как MySQL, Microsoft SQL Server или Mariadb, которые конкурируют с PostgreSQL.

PostgreSQL – это надежная, но стабильная реляционная база данных, которая была около 1997 года и доступна на всех основных операционных системах – Linux, Windows и MacOS. Поскольку PostgreSQL известен своей стабильностью, расширяемостью и соответствием стандартами, это популярный выбор для разработчиков и компаний для их использования для их базы данных.

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

Установка

Если вы используете Windows, загрузите Windows Installer PostgreSQL.

Если вы используете Mac, это руководство предполагает, что у вас есть Домашний вид Установлен на вашем компьютере в качестве менеджера пакета для установки новых программ. Если вы этого не сделаете, просто нажмите на ссылку и следуйте инструкциям по установке домелки.

Откройте терминал и установите PostgreSQL с помощью Brew.

brew install postgresql

Вы можете увидеть инструкции в сети, которые скажут Brew Install PostgreSinstead PostgreSQL. Оба эти параметра будут устанавливать PostgreSQL на вашем компьютере.

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

brew services start postgresql
==> Successfully started `postgresql` (label: homebrew.mxcl.postgresql)

Если в любой момент вы хотите остановить PostgreSQL Service, вы можете запустить Brew Services Stop PostgreSQL.

PostgreSQL установлен сейчас, поэтому следующий шаг должен подключиться к линии PostgresCommand, где мы можем запустить команды SQL.

PostgreSQL. командная строка

PSQL – это интерактивный терминал PostgreSQL. Запуск PSQL подключит вас к хосту PostgreSQL. Запуск PSQL –help предоставит вам дополнительную информацию о доступных вариантах для подключения с PSQL.

  • -h--host = имя хоста |. Database Server Host или Socket Directory (по умолчанию: «Локальный сокет»)
  • --port = порт |. Порт сервера базы данных (по умолчанию: «5432»)
  • --username = имя пользователя |. Имя пользователя базы данных (по умолчанию: «Your_username»)
  • -w- Нет-пароль |. Никогда не подскажите пароль
  • -W--password |. Заставьте запрос пароля (должно произойти автоматически)

Мы просто подключаемся к базе данных Postgres по умолчанию с системой входа в систему по умолчанию – нет флагов опций.

psql postgres

Вы увидите, что мы входили в новое соединение. Теперь мы внутри PSQL в базе данных Postgres. Подсказка заканчивается # для обозначения того, что мы вошли в систему как суперпользователь или root.

postgres=#

Команды в пределах PSQL начнутся с обратной ячейки (). Чтобы проверить нашу первую команду, мы можем обеспечить какую базу данных, пользователя и порт, который мы подключили к команде \ conninfo.

postgres=# \conninfo
You are connected to database "postgres" as user "your_username" via socket in "/tmp" at port "5432".

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

  • \ Q |. Выход PSQL связь
  • \ c |. Подключиться к новой базе данных
  • \ dt |. Список Все таблицы
  • \ du |. Перечислите все роли
  • \ Список |. Список баз данных

Давайте создадим новую базу данных и пользователь, поэтому мы не используем учетные записи по умолчанию, которые имеют привилегии Superuser.

Создать пользователя

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

postgres=# CREATE ROLE me WITH LOGIN PASSWORD 'password';

Мы хотим, чтобы я мог создать базу данных.

postgres=# ALTER ROLE me CREATEDB;

Вы можете запустить \ du, чтобы переписать все роли/пользователей.

me          | Create DB                           | {}
postgres    | Superuser, Create role, Create DB   | {}

Теперь мы хотим создать базу данных от пользователя ME. Выйдите из сеанса по умолчанию с \ Q для Quit.

postgres=# \q

Мы вернемся в клеммное соединение нашего компьютера. Теперь мы свяжем со мной Postgres.

psql -d postgres -U me

Вместо postgres = #, наша подсказка показывает postgres => Теперь, что означает, что мы больше не вошли в систему как суперпользователь.

Создать базу данных

Мы можем создать базу данных с помощью команды SQL.

postgres=> CREATE DATABASE api;

Используйте команду \ lister, чтобы увидеть доступные базы данных.

Name    |    Owner    | Encoding |   Collate   |    Ctype    |
api     | me          | UTF8     | en_US.UTF-8 | en_US.UTF-8 |

Давайте подключитесь к новой базе данных API с помощью команды \ c (connect).

postgres=> \c api
You are now connected to database "api" as user "me".
api=>

Наша подсказка теперь отображает, что мы подключены к API.

Создать таблицу

Последнее, что мы сделаем в командной строке PSQL Command, создают таблицу, называемую пользователями с тремя полями – два типа Varchar и идентификатор первичного ключа на автоматическом увеличении.

api=>
CREATE TABLE users (
  ID SERIAL PRIMARY KEY,
  name VARCHAR(30),
  email VARCHAR(30)
);

Убедитесь, что не используйте символ BackTick при создании и работе с таблицами в PostgreSQL. Хотя в MySQL разрешены Backticks, они не действительны в PostgreSQL. Кроме того, убедитесь, что у вас нет задней запятой в Создать команду table.

Мы добавим два записей в Пользователи иметь некоторые данные для работы.

INSERT INTO users (name, email)
  VALUES ('Jerry', 'jerry@example.com'), ('George', 'george@example.com');

Давайте убедимся, что добавлено правильно, получая все записи у пользователей.

api=> SELECT * FROM users;
id |  name  |       email        
----+--------+--------------------
  1 | Jerry  | jerry@example.com
  2 | George | george@example.com

Теперь у нас есть пользователь, база данных, таблица и некоторые данные. Мы можем начать строить наш Node.js redful API для подключения к этим данным, хранящимся в базе данных PostgreSQL.

Настройка экспресс-сервера

На данный момент мы закончили всеми нашими задачами PostgreSQL, и мы можем начать настройку нашего приложения Node.js и Express Server.

Создайте каталог для проекта для жизни.

mkdir node-api-postgres
cd node-api-postgres

Вы можете запустить NPM init -y, чтобы создать Package.json или копировать код ниже в файл package.json.

{
  "name": "node-api-postgres",
  "version": "1.0.0",
  "description": "RESTful API with Node.js, Express, and PostgreSQL",
  "main": "index.js",
  "license": "MIT"
}

Мы захотим установить Экспресс Для сервера и Узел-postgres (PG) Чтобы быть в состоянии подключиться к PostgreSQL.

npm i express pg

Теперь у нас есть наши зависимости, загруженные в Node_Modules и Package.json.

Создайте файл index.js, который мы будем использовать в качестве точки входа для нашего сервера. В верхней части нам потребуется модуль Express, встроенный в BodyParser Middlware и установите наше приложение и переменные порта.

const express = require('express')
const bodyParser = require('body-parser')
const app = express()
const port = 3000

app.use(bodyParser.json())
app.use(
  bodyParser.urlencoded({
    extended: true,
  })
)

Мы расскажем к маршруту, чтобы искать запрос на получение root (/) URL и вернуть немного JSON.

app.get('/', (request, response) => {
  response.json({ info: 'Node.js, Express, and Postgres API' })
})

Теперь установите приложение, чтобы прослушать набор порта.

app.listen(port, () => {
  console.log(`App running on port ${port}.`)
})

Из командной строки мы можем запустить сервер, ударяя index.js.

node index.js
App running on port 3000.

Перейти к http://localhost: 3000 В баре URL вашего браузера, и вы увидите, что JSON мы установили ранее.

{
  info: "Node.js, Express, and Postgres API"
}

Теперь Express Server работает сейчас, но он отправляет только некоторые статические данные JSON, которые мы создали. Следующим шагом является подключение к PostgreSQL из Node.js, чтобы иметь возможность сделать динамические запросы.

Подключение к базе данных из Node.js

Мы будем использовать Узел-postgres Модуль для создания пула подключений. Таким образом, нам не нужно открывать клиента и закрыть его каждый раз, когда мы делаем запрос.

Популярный вариант для производства объединение будет использоваться PGBouncer , легкий соединительный бассейн для PostgreSQL.

Создайте файл под названием Queries.js и настройте конфигурацию вашего соединения PostgreSQL.

const Pool = require('pg').Pool
const pool = new Pool({
  user: 'me',
  host: 'localhost',
  database: 'api',
  password: 'password',
  port: 5432,
})

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

Целью этого учебника является разрешение Get, Post, Put и Delete Operations на API, которая запускает соответствующие команды базы данных. Для этого мы настроим маршрут для каждой конечной точки, и функция, которая соответствует каждому запросу.

Создание маршрутов

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

  • Получить/ |. Displayhome ()
  • Получить/пользователи |. GetUsers ()
  • Получить/Пользователи/: ID |. getUserbyid ()
  • Постпользователи | Создать пользователя()
  • Поставить/Пользователи/: ID | UssuedUser ()
  • Удалить/Пользователи/: ID | DELETEUSER ()

В index.js мы сделали App.get () для конечной точки root с функцией в нем. Теперь в Queries.js мы создадим конечные точки, которые будут отображать всех пользователей, отображать один пользователь, создать новый пользователь, обновить существующий пользователь и удалить пользователя.

Получите все пользователи

Наша первая конечная точка будет полученным запросом. Внутри Pool.Query () мы можем поставить RAW SQL, который коснется базы данных API. Мы выберем всех пользователей и заказ по ID.

const getUsers = (request, response) => {
  pool.query('SELECT * FROM users ORDER BY id ASC', (error, results) => {
    if (error) {
      throw error
    }
    response.status(200).json(results.rows)
  })
}

Получите один пользователь по ID

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

В запросе SQL мы ищем ID = 1 $. В этом случае 1 доллар – это пронумерованный заполнитель, который PostgreSQL использует своевременное вместо? Зажигатель вы можете быть знакомы с других ароматов SQL.

const getUserById = (request, response) => {
  const id = parseInt(request.params.id)

  pool.query('SELECT * FROM users WHERE id = $1', [id], (error, results) => {
    if (error) {
      throw error
    }
    response.status(200).json(results.rows)
  })
}

Опубликовать новый пользователь

API возьмет запрос GET и POST на конечную точку/пользователей. В запросе пост мы добавим нового пользователя. В этой функции мы извлекаем имя и свойства электронной почты из корпуса запроса и вставляем значения.

const createUser = (request, response) => {
  const { name, email } = request.body

  pool.query('INSERT INTO users (name, email) VALUES ($1, $2)', [name, email], (error, results) => {
    if (error) {
      throw error
    }
    response.status(201).send(`User added with ID: ${result.insertId}`)
  })
}

Поместите обновленные данные в существующий пользователь

A/Users/: id конечная точка также возьмет два http-запроса – той мы создали для getUserbyId, а также поставить, чтобы изменить существующий пользователь. Для этого запроса мы будем комбинировать то, что мы узнали в Get и Post, чтобы использовать предложение обновления.

Стоит отметить, что поставил это idempotent , что означает тот же тот же звонок, может быть сделан снова и снова и будет создавать тот же результат. Это отличается от поста, в котором точно такой же повторяющийся вызов непрерывно сделает новые пользователи с теми же данными.

const updateUser = (request, response) => {
  const id = parseInt(request.params.id)
  const { name, email } = request.body

  pool.query(
    'UPDATE users SET name = $1, email = $2 WHERE id = $3',
    [name, email, id],
    (error, results) => {
      if (error) {
        throw error
      }
      response.status(200).send(`User modified with ID: ${id}`)
    }
  )
}

Удалить пользователя

Наконец, мы будем использовать предложение Delete On/Users/: ID, чтобы удалить определенный пользователь по ID. Этот звонок очень похож на нашу функцию GetUSerbyId ().

const deleteUser = (request, response) => {
  const id = parseInt(request.params.id)

  pool.query('DELETE FROM users WHERE id = $1', [id], (error, results) => {
    if (error) {
      throw error
    }
    response.status(200).send(`User deleted with ID: ${id}`)
  })
}

Экспорт

Чтобы получить доступ к этим функциям из index.js, нам нужно будет экспортировать их. Мы можем сделать это с Module.exports, создавая объект функций. Поскольку мы используем синтаксис ES6, мы можем написать GetUsers вместо GetUsers: GetUsers и так далее.

module.exports = {
  getUsers,
  getUserById,
  createUser,
  updateUser,
  deleteUser,
}

Вот наши полные Queries.js файл.

const Pool = require('pg').Pool
const pool = new Pool({
  user: 'me',
  host: 'localhost',
  database: 'api',
  password: 'password',
  port: 5432,
})
const getUsers = (request, response) => {
  pool.query('SELECT * FROM users ORDER BY id ASC', (error, results) => {
    if (error) {
      throw error
    }
    response.status(200).json(results.rows)
  })
}

const getUserById = (request, response) => {
  const id = parseInt(request.params.id)

  pool.query('SELECT * FROM users WHERE id = $1', [id], (error, results) => {
    if (error) {
      throw error
    }
    response.status(200).json(results.rows)
  })
}

const createUser = (request, response) => {
  const { name, email } = request.body

  pool.query('INSERT INTO users (name, email) VALUES ($1, $2)', [name, email], (error, results) => {
    if (error) {
      throw error
    }
    response.status(201).send(`User added with ID: ${result.insertId}`)
  })
}

const updateUser = (request, response) => {
  const id = parseInt(request.params.id)
  const { name, email } = request.body

  pool.query(
    'UPDATE users SET name = $1, email = $2 WHERE id = $3',
    [name, email, id],
    (error, results) => {
      if (error) {
        throw error
      }
      response.status(200).send(`User modified with ID: ${id}`)
    }
  )
}

const deleteUser = (request, response) => {
  const id = parseInt(request.params.id)

  pool.query('DELETE FROM users WHERE id = $1', [id], (error, results) => {
    if (error) {
      throw error
    }
    response.status(200).send(`User deleted with ID: ${id}`)
  })
}

module.exports = {
  getUsers,
  getUserById,
  createUser,
  updateUser,
  deleteUser,
}

Завершение настройки

Теперь, когда у нас есть все наши вопросы, последнее, что нам нужно сделать, это потянуть их в файл index.js и сделать конечные маршруты для всех функций запроса, которые мы создали.

Чтобы получить все экспортированные функции из Queries.js, нам потребуется файл и присваиваю его переменной.

const db = require('./queries')

Теперь для каждой конечной точки мы установим метод HTTP-запроса, путь URL конечной точки и соответствующую функцию.

app.get('/users', db.getUsers)
app.get('/users/:id', db.getUserById)
app.post('/users', db.createUser)
app.put('/users/:id', db.updateUser)
app.delete('/users/:id', db.deleteUser)

Вот наш полный index.js, точка входа сервера API.

const express = require('express')
const bodyParser = require('body-parser')
const app = express()
const db = require('./queries')
const port = 3000

app.use(bodyParser.json())
app.use(
  bodyParser.urlencoded({
    extended: true,
  })
)

app.get('/', (request, response) => {
  response.json({ info: 'Node.js, Express, and Postgres API' })
})

app.get('/users', db.getUsers)
app.get('/users/:id', db.getUserById)
app.post('/users', db.createUser)
app.put('/users/:id', db.updateUser)
app.delete('/users/:id', db.deleteUser)

app.listen(port, () => {
  console.log(`App running on port ${port}.`)
})

Теперь только с этими двумя файлами у нас есть сервер, база данных и API все настроен. Вы можете запустить сервер, снова нажав index.js.

node index.js
App running on port 3000.

Теперь, если вы идете в http://localhost: 3000/пользователи или http://localhost: 3000/пользователи/1 Вы увидите ответ JSON из двух запросов GET. Но как мы можем проверить наш пост, поставить и удалить запросы?

Это можно сделать с Curl , инструмент командной строки, который уже доступен на вашем терминале. Ниже приведены примеры, которые вы можете запустить в командной строке, чтобы проверить все протоколы.

Убедитесь, что сервер активно работает в одном окне терминала, когда вы запускаете эти команды в отдельном окне.

СООБЩЕНИЕ

Добавьте нового пользователя с именем Elaine и Email Elaine@example.com.

curl --data "name=Elaine&email=elaine@example.com" 
http://localhost:3000/users

ПОМЕЩАТЬ

Обновите пользователя с ID 1, чтобы иметь имя Kramer и Email Kramer@example.com.

curl -X PUT -d "name=Kramer" -d "email=kramer@example.com" 
http://localhost:3000/users/1

УДАЛЯТЬ

Удалите пользователя с ID 1.

curl -X "DELETE" http://localhost:3000/users/1

Заключение

Поздравляем, теперь у вас есть функционирующий сервер API, работающий на Node.js и подключен к базе данных Active PostgreSQL. В этом руководстве мы узнали, как установить и настроить PostgreSQL в командной строке, как создавать пользователей, базы данных и таблиц и как запустить команды SQL. Мы также узнали, как создать Express Server, который может обрабатывать несколько методов HTTP и как использовать модуль PG для подключения к PostgreSQL из узла.

С этим знанием вы должны быть в состоянии построить этот API и использовать его для своих личных или профессиональных проектов развития.

Plug: Logrocket, DVR для веб-приложений

https://logrocket.com/signup/

Logrocket Это инструмент для ведения журнала Frontend, который позволяет вам повторить проблемы, как если бы они произошли в вашем браузере. Вместо того, чтобы угадать, почему случаются ошибки, или просят пользователей на скриншоты и журнал свалки, Lognocket позволяет воспроизвести сеанс, чтобы быстро понять, что пошло не так. Он отлично работает с любым приложением, независимо от основ и имеет плагины для регистрации дополнительного контекста из Redux, Vuex и @ Ngrx/Store.

В дополнение к регистрации действий и состояния Redux, Lognocket Records Console Logs, ошибки JavaScript, Stacktraces, Networks/Ответы с заголовками + тел, метаданные браузера и пользовательские журналы. Он также привлекает инструменты DOM для записи HTML и CSS на странице, воссоздая Pixel-Perfect видео даже самых сложных приложений для одной страницы.

Попробуйте бесплатно.

Пост Настройка спокойного API с Node.js и PostgreSQL появился первым на Logocket blog .

Оригинал: “https://dev.to/bnevilleoneill/setting-up-a-restful-api-with-node-js-and-postgresql-1jbf”