Мы собираемся создать API с Express и использовать MongoDB для хранения наших данных. Мы рекомендуем, чтобы перед продолжением этого руководства были необходимы базовые знания JavaScript, MongoDB и Node.JS.
Что мы собираемся делать
В этом руководстве мы собираемся создать базу данных и API для управления ее данными. Для простоты мы будем использовать MongoDB Atlas для нашей базы данных.
Вот различные шаги этого руководства:
- Подготовка проекта
- Настройка Экспресс
- Настройка MongoDB
- Создание различных маршрутов 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.
Вот шаги, которые необходимо выполнить:
- Во-первых, нам нужно перейти на 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 в нашем браузере.
Рекомендации
- https://expressjs.com/ru/guide/routing.html
- https://www.mongodb.com/docs/drivers/node/current/quick-start/
Проверьте проект на моем GitHub: