Мы собираемся создать API с Express и использовать MongoDB для хранения наших данных. Мы рекомендуем, чтобы перед продолжением этого руководства были необходимы базовые знания JavaScript, MongoDB и Node.JS.

Что мы собираемся делать

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

Вот различные шаги этого руководства:

  1. Подготовка проекта
  2. Настройка Экспресс
  3. Настройка MongoDB
  4. Создание различных маршрутов API

К концу этого руководства у нас будет полностью работающий API, который сможет получать и добавлять новые Cars данные.

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

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

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

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

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

Наша папка 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.

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

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

2. Настройка экспресса

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

Файл index.js — это место, где будет находиться вся наша экспресс-логика.

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

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

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

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

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

Вот шаги, которые необходимо выполнить:

  1. Во-первых, нам нужно перейти на cloud.mongodb.com и войти в свою учетную запись или создать ее, если это необходимо. После входа в нашу учетную запись мы собираемся создать базу данных.

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

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

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

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

Далее мы собираемся нажать на connect your application.

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

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

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

Далее мы собираемся назвать нашу базу данных 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, используя клиентский объект, мы подключаемся к MongoDB, если соединение не удалось, мы отправим ошибку с res.status(500).send(err). Если соединение будет успешным, мы получим все документы по автомобилям в cars collection нашей базы данных test.

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

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

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

Время испытаний!!

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

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

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

Рекомендации

Проверьте проект на моем GitHub: