Простое пошаговое руководство по созданию REST API с использованием Node.js, Express и базы данных PostgreSQL (с TS) для приложения todo.

Это первый раз за долгое время, когда я переключился на реляционную базу данных, такую ​​как PostgreSQL, которую мы будем использовать здесь, чтобы использовать ее для любого из моих API или проектов. С тех пор, как я начал использовать MongoDB, я никогда не возвращался к использованию реляционной БД до сих пор.

Предполетные проверки 😅

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

  1. Знакомы ли вы с TypeScript, т. е. либо работаете с ним в настоящее время, либо работали с ним в прошлом?
  2. Вы установили PostgreSQL на свой компьютер и у вас есть работающий экземпляр базы данных, готовый к работе?
  3. Вы знакомы с базами данных SQL?

Если вы ответили утвердительно на все, а может даже на два, или, может быть, вы начинаете со всем этим и ответили нет на все три вопроса, не беда, давайте начнем 🚀.

Какова наша цель здесь?

Идея состоит в том, чтобы сделать простое приложение todo, которое позволяет пользователю создавать, редактировать, удалять и просматривать свои задачи. И для достижения всех этих функций наше приложение будет взаимодействовать с серверной частью через REST API. Серверной частью будет приложение Node.js/Express с базой данных PostgreSQL.

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



Структура каталогов

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

Инициализация всего

  • Как только начинается каждый проект узла, запустите npm init -y для создания файла package.json,
  • Как только это будет сделано, мы сможем получить все необходимые зависимости. Поскольку здесь мы используем TypeScript, нам также понадобится @types для всех наших зависимостей.

  • Идем дальше и добавляем следующие скрипты в package.json , чтобы сделать нашу жизнь немного проще.

  • Запустите tsc --init для инициализации и создания файла tsconfig.json. Я держу свой таким, но вы всегда можете настроить его так, как хотите.

Внедрение Postgres 🐘

При создании этих API убедитесь, что ваш локальный экземпляр Postgres работает. Помните, мы установили pg как зависимость? Пришло время использовать его. Мы создадим новый объект с именем pool — не стесняйтесь называть его как хотите — и предоставим информацию о нашей локальной базе данных и таблицах для использования.

Следует иметь в виду, что этот объект pool сможет использовать только существующую базу данных (здесь мы называем ее perntodo), в отличие от mongoose и MongoDB, где он может быть создан на лету. Если вы еще не создали свою базу данных и таблицу, это будут запросы, которые нам понадобятся в этом проекте —

Возвращение к экспрессу

Нам нужен работающий сервер, верно? Вы, конечно, уже знаете, как это сделать, импортируете все материалы, связанные с Express и cors, создаете и используете промежуточное ПО Express и cors и запускаете сервер, прослушивая некоторые PORT по вашему выбору — я всегда выбираю 4000 для серверов. Вы увидите, что ToDoRouter импортируется и используется; мы перейдем к этой части через секунду.

Маршрут для каждой операции

Если вы помните, нам нужно реализовать методы GET, POST, PUT и DELETE, для чего нам нужны следующие маршруты —

Контроллер для каждого маршрута

Когда пользователь отправит HTTP-запрос на любой из маршрутов, он будет использовать соответствующую функцию контроллера для выполнения этой операции. Теперь, чтобы получить доступ к нашей базе данных Postgres, мы, наконец, используем объект pool. В конечном счете, мы будем запускать запросы, которые мы перечислили ранее, чтобы получить/сделать то, что мы хотим. Мы выполняем наши запросы с помощью метода .query()pool.query("query goes here", [variables go here as array])

  1. Запрос для onGetAllTodosSELECT * FROM todos
  2. Запрос для onCreateNewTodoINSERT INTO todos (description) VALUES($1) RETURNING *
  3. Запрос для onGetTodoByIdSELECT * FROM todos WHERE _id = $1", [id]
  4. Запрос для onUpdateTodoById UPDATE todos SET description = $1 WHERE _id = $2", [desc, id]
  5. Запрос для onDeleteTodoByIdDELETE FROM todos WHERE _id = $1", [id]

Момент истины 🤞

Когда у нас есть controllers, каждый контроллер подключен к определенному route, а маршрут импортирован и используется в файле server.ts, мы можем попробовать этот API. Чтобы протестировать эти конечные точки, вы можете использовать Postman или, как я, использовать файл .rest.

Подведение итогов

Точно так же у нас есть конечные точки API, которые теперь могут использоваться внешним интерфейсом — созданные с помощью Node, Express и БД PostgreSQL. На этом мы закончили со сборкой сервера — со всем стеком PERN, только еще не с React.

Спасибо за прочтение. Надеюсь, вы нашли его полезным, простым и интересным. Если да, обязательно ознакомьтесь с другими моими статьями, в которых я рассказываю о таких темах, как React, Node.js и TypeScript.

Ваше здоровье! ✌️

Дополнительные материалы на PlainEnglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter и LinkedIn. Присоединяйтесь к нашему сообществу Discord.