Введение

При работе с сервером нам всегда придется сохранять и извлекать данные с помощью базы данных. Существует множество серверных языков и баз данных. В этой статье мы узнаем, как использовать MongoDB с Node.js.

MongoDB — нереляционная база данных. Это документоориентированная система хранения. Он хранит и извлекает данные в формате JSON вместо традиционного формата таблиц и строк, используемых в реляционных базах данных (MYSQL, PostgreSQL).


Цели

В этом руководстве основное внимание будет уделено следующим вариантам использования:

  • Получить строку подключения MongoDB
  • Создайте простую книжную инвентаризацию


Предпосылки

  1. Установлена ​​поддерживаемая версия Node.js
  2. Атлас MongoDB учетная запись
  3. Базовые знания Node.js и Express.js


Начиная

Чтобы продемонстрировать, как использовать MongoDB с Node.js, мы создадим простую инвентаризацию книг. Мы узнаем, как добавлять, получать, редактировать и удалять книги из нашего инвентаря.

Убедимся, что в нашем редакторе кода готовы следующие папки и файлы.

vs.png


Установка зависимостей

Краткое примечание:

Mongoose — это библиотека, которая создает соединение между MongoDB и приложением на основе Express.

Dotenv используется для загрузки данных из нашего config.env файл в среду, чтобы мы могли получить к нему доступ, используя process.env .

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

npm install express 
npm install mongoose
npm install  dotenv
Войти в полноэкранный режим

Выйти из полноэкранного режима


Получение строки подключения MongoDB

Войдите в свой Атлас MongoDB учетная запись для подключения к базе данных из вашего приложения Node.js

Выполните следующие простые шаги, чтобы получить строку подключения:

  • Нажмите на connect на панели управления развертыванием базы данных.

new_connect.png

  • Выбрать Connect to your application вариант.

соединение.png

  • Скопируйте строку подключения

кластер.png


Давайте углубимся

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

server.js файл должен выглядеть так на данный момент

const express = require('express')
const dotenv = require('dotenv')
const path = require('path')
const app = express()

dotenv.config({path: './config/config.env'})
app.use(express.json())

const port = process.env.port
app.listen(port, () => {
    console.log(`port ${port} connected...`)
})
Войти в полноэкранный режим

Выйти из полноэкранного режима

Давайте проиллюстрируем config.env файл, этот файл будет содержать все переменные среды.

port = 8080
mongo_uri = mongodb+srv://mongodb-template:<password>@cluster0.8lmmv.mongodb.net/myFirstDatabase?retryWrites=true&w=majority
Войти в полноэкранный режим

Выйти из полноэкранного режима

Перезапустите сервер после копирования кода в config.env файл

Заменять <password> с фактическим паролем базы данных

Следующий шаг, давайте создадим соединение MongoDB, в db.js файл.

const mongoose = require('mongoose')

const connectDb = async () => {
const conn = await mongoose.connect(process.env.mongo_uri,  {
useNewUrlParser: true,
useUnifiedTopology: true
})
console.log(`mongodb connected: ${conn.connection.host}`)
}

module.exports = connectDb

Войти в полноэкранный режим

Выйти из полноэкранного режима

Теперь, когда соединение с базой данных настроено и готово, обновите server.js файл.

const express = require('express')
const dotenv = require('dotenv')
const connectDb = require('./database/db')
const app = express()

dotenv.config({path:'./config/config.env'})
app.use(express.json())

//database connection
connectDb()

const port = process.env.port
app.listen(port, () => {
    console.log(`port ${port} connected...`)
})

Войти в полноэкранный режим

Выйти из полноэкранного режима


Создание схемы

MongoDB Schema — это объект JSON, который помогает нам решить, как будет выглядеть структура базы данных и что разрешено хранить.

Настройка BookSchema.js :

const mongoose = require('mongoose')

const BookSchema = new mongoose.Schema({
    title:{
        type:String,
        required:true,
        unique:true
    },
    author:{
        type:String,
        required:true,
        unique:true
    },
    isbn:{
        type:String,
        unique:true
    }
})

module.exports = mongoose.model('BookSchema', BookSchema)

Войти в полноэкранный режим

Выйти из полноэкранного режима


Маршруты

Начиная с book.js файл, принесите router а также BookSchema модули.

const router = require('express').Router()
const Book = require('../model/BookSchema')
Войти в полноэкранный режим

Выйти из полноэкранного режима

book.js файл будет содержать следующие запросы:


POST-запрос

router.post(" async (req,res) => {
    const { title, author, isbn } = req.body
    const newBook = await Book.create({ title, author, isbn })
    res.status(201).json({ 
        success:true, 
        data:newBook 
    })
})
Войти в полноэкранный режим

Выйти из полноэкранного режима

Приведенный выше код будет хранить name, author, and isbn книги.


ПОЛУЧИТЬ запрос

Будет два варианта GET запрос. Одна воля GET все книги, а другой будет GET просто конкретная книга.

router.get("  async (req,res) => {
    const books = await Book.find()
    res.status(200).json({ 
        success:true, 
        data: books, 
        num: books.length
    })
})

router.get('/:id',  async (req,res) => {
  const book = await Book.findById(req.params.id)  
  res.status(200).json({ 
      success:true, 
      data: book 
    })
})
Войти в полноэкранный режим

Выйти из полноэкранного режима


PUT-запрос

router.put('/:id', async (req,res) => {
    let book = await Book.findById(req.params.id)
    book = await Book.findByIdAndUpdate(req.params.id, {$set:req.body}, {
        new:true,
        runValidator:false
    })  
    res.status(200).json({ 
        success:true, 
        data: book 
    })
})
Войти в полноэкранный режим

Выйти из полноэкранного режима


УДАЛИТЬ запрос

Эта операция также будет иметь два варианта, если мы хотим УДАЛИТЬ одну или все записи из базы данных.

router.delete('/:id', async (req,res) => {
    await Book.findByIdAndRemove(req.params.id)
    res.status(200).json({ 
        success:true, 
        data: 'book deleted' 
    })
})

router.delete(" async (req,res) => {
    await Book.deleteMany()
   res.status(200).json({ 
       success:true, 
       data: 'All books deleted' 
    })
})
Войти в полноэкранный режим

Выйти из полноэкранного режима

Наконец, экспортируйте файл router.

module.exports = router
Войти в полноэкранный режим

Выйти из полноэкранного режима

Сделайте глубокий вдох. На данный момент мы почти закончили наш проект.
server.js файл должен быть обновлен с помощью router модуль.

const express = require('express')
const dotenv = require('dotenv')
const connectDb = require('./database/db')
const app = express()

dotenv.config({path:'./config/config.env'})
app.use(express.json())

//database connection
connectDb()

//mount the route
const bookRoute = require('./routes/book')
app.use('/api/v1/book', bookRoute)

const port = process.env.port
app.listen(port, () => {
    console.log(`port ${port} connected...`)
})
Войти в полноэкранный режим

Выйти из полноэкранного режима


Вывод

В этой статье мы узнали, как использовать MongoDB с Node.js, создав простой проект. Надеюсь, вам было легко ориентироваться в этом руководстве.

Ссылка на полный проект на github:

Удачного кодирования 😀


Кредиты