Как создать простой API с помощью Express и MongoDB

План действий

Мы создадим базу данных и API для работы с ней. В целях простоты будем использовать MongoDB Atlas.

Вот что мы будем делать.

  • Подготовка проекта.
  • Установка Express.
  • Настройка MongoDB.
  • Создание различных маршрутов API.

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


1. Подготовка проекта

Создание каталога

Для начала мы создадим новый каталог на компьютере и назовем его api-mongodb. Обратите внимание, что это лишь один из вариантов. Вы выбрать любое название.

Создание каталога api-mongodb

Создание нескольких файлов и папки

Весь код можно разместить в одном файле, но для большего удобства мы разделим его на несколько. Папка src будет содержать логику подключения к базе данных в файле dbconnect.js и различные обратные вызовы для каждого маршрута в файле cars.js. В файле secret.js будет находиться ключ подключения к базе данных, а в index.js  —  код Express.

Настраиваем папку api-mongodb следующим образом:

Структура проекта

Инициализация NPM и установка библиотек

После создания каталога и файлов следует инициализировать NPM и установить библиотеки Express и MongoDB.

Чтобы инициализировать NPM, выполните команду npm init -y.

npm init -y

Теперь установим Express и MongoDB с помощью команды npm i express && npm i mongodb или npm i express mongodb.

npm i express && npm i mongodb

Перед установкой Express добавим "type": "module" в файл package.json.

“type”: “module” добавлен в строку 6

Теперь мы можем использовать синтаксис импорта и экспорта модулей ES6.


2. Установка Express

Каталог готов. Теперь приступим к созданию сервера с помощью Express. Откроем файл index.js, чтобы поместить туда код. Там будет находиться вся логика Express.

Сначала импортируем Express, затем создадим новый экземпляр сервера с помощью const app = express(). Сервер будет работать на порту 3333.

Затем, используя app.listen(), мы привязываем и прослушиваем соединения на указанном порту.

Текущее состояние файла index.js

Пока мы не будем определять маршруты. Прежде чем это сделать, нужно настроить MongoDB.


3. Настройка MongoDB

Чтобы использовать MongoDB, создадим кластер MongoDB Atlas. Затем подключим проект к кластеру с помощью встроенных драйверов MongoDB.

Вот пошаговая инструкция.

  1. Откройте cloud.mongodb.com, войдите в свой аккаунт или создайте его. После входа в учетную запись создайте базу данных.
Кликните на “Build a Database”

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

Создайте кластер

3. Теперь нужно установить имя пользователя и пароль для соединения. Для этого можно использовать сертификат, но для простоты применим аутентификацию по имени пользователя/паролю.

Заполните форму

4. Далее указываем текущий IP-адрес, чтобы подключиться к базе данных.

5. После добавления IP-адреса нажимаем finish and close и возвращаемся на страницу базы данных, где нажимаем кнопку connect.

Кликните на connect

Далее кликните на connect your application.

Кликните на connect your application

Затем скопируйте выделенную строку подключения ниже и вставьте ее в файл проекта secret.js.

Строка подключения

После вставки строки подключения необходимо заменить <username> на созданное имя пользователя, а <password>  —  на выбранный пароль. Теперь экспортируем строку подключения, чтобы использовать ее в других файлах.

Строка подключения

Прежде чем вернуться к VS Code, создадим базу данных в Mongo Atlas. Для этого нажимаем на Database, а затем  —  на Add My Own Data.

Add My Own Data

Назовем базу данных test, а ее первую коллекцию  —  cars.

Создание базы данных

Теперь, когда база данных в Atlas готова, можно вернуться в редактор кода и с помощью строки подключения создать новый экземпляр MongoClient, который позволит подключиться к базе данных Mongo.

Создание клиента

В приведенном выше коде мы импортировали класс MongoClient, а также uri, который является строкой подключения, экспортированной ранее.


4. Создание различных маршрутов API

Теперь добавим маршруты в файл index.js. Определим маршрут GET для отображения всех автомобилей, имеющихся в базе данных, и маршрут POST для добавления новых.

Определение маршрутов

В приведенном выше коде мы создали два маршрута.

  • app.get(‘/cars’, getCars)  —  GET-маршрут, получающий данные обо всех автомобилях из базы данных;
  • app.post(‘/cars, addCar)  —  POST-маршрут, позволяющий отправлять новые автомобили в базу данных.

Обратите внимание, что мы создаем функции getAllCars и addCar в файле cars.js. Можно поместить все в один файл, но в целях удобства и лучшей читаемости выделим для них отдельный.

Определение функций getCars и addCar

В приведенном выше коде мы импортировали объект client из dbconnect.js.

В строке 5 (export const getCars = (req, res) => {...}) создаем функцию getCars и экспортируем ее, чтобы использовать в файле index.js.

Объект req представляет HTTP-запрос и включает свойства для строки запроса, параметров, тела, HTTP-заголовков и так далее. Объект res представляет HTTP-ответ, который приложение Express отправляет при получении HTTP-запроса.

В строке 6, используя объект client, мы подключаемся к MongoDB. Если соединение не установилось, отправляем ошибку с помощью res.status(500).send(err). Если соединение прошло успешно, мы получим все документы автомобилей в коллекции cars collection из тестовой базы данных.

  • collection.find().toArray((err, result) => {: метод find() возвращает объект запроса курсора, который мы преобразуем в массив с помощью toArray().
  • if(err) res.status(500).send(err);: если произошла ошибка, мы отправим ее через API.
  • if(result) res.json(result);: если есть результат, мы также его отправим.
  • client.close();: после всех операций, описанных выше, мы закрываем базу данных и ее основные соединения.
Функция обработки POST

Приведенная выше функция предназначена для добавления нового автомобиля в базу данных. Как и в случае функции getCars, мы подключаемся к MongoDB, затем проверяем наличие ошибок.

В строке 3 с помощью const car = req.body; получаем объект автомобиля из тела запроса, затем вставляем его в базу данных, используя collection.insertOne(car, (err, result) => {…});.

Итак, проведем тестирование!

Тест функции POST в Postman

В приложении Postman можно добавить новый автомобиль в базу данных. Если все пройдет успешно, мы получим ответ от API:

{
"acknowledged": true,
"insertedId": “62e5b4f8067855dc5671f638”
}

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

Тест GET в браузере

Этот проект можно найти на GitHub.

Читайте также:

Читайте нас в TelegramVK и Дзен


Перевод статьи Ralph Sébastien Placide: Let’s build a simple API with Express and MongoDB

Предыдущая статьяКак работает интернет: основы архитектуры веб-сетей
Следующая статьяВведение в алгоритмы машинного обучения: линейная регрессия