NodeJS로 MongoDB CRUD API 빌드

20873 단어 expressjsmongodbnode

🎯 목표:


  • NodeJS로 MongoDB CURD API 빌드

  • 👨‍💻 사용된 기술:


  • ExpressJS
  • Monk
  • Joi

  • 📃 전제 조건:


  • 자바스크립트
  • NodeJS
  • ExpressJS
  • 컴퓨터에서 MongoDB 설정 및 실행

  • 난이도: 🡆중급



    설정



    빈 디렉토리에 새 NodeJS 프로젝트를 초기화하고 Monk, Express 및 Joi를 설치하여 시작하십시오.
  • 노드 프로젝트 시작

  • npm init -y
    


  • 익스프레스, 수도사, 조이 설치

  • npm i express monk joi
    


    기본 익스프레스 서버



    그런 다음 기본 익스프레스 서버를 설정하여 모든 것이 의도한 대로 실행되는지 확인합니다...

    Hello World 서버 설정

    const express = require("express")
    const app = express()
    const port = 3030
    
    //Express.json to parse the request json body into useable Javascript Objects
    app.use(express.json())
    
    app.get("/", (req, res) => {
      res.send("<h1>Hello World!</h1>")
    })
    
    app.listen(port, () => {
      console.log(`Listening on port http://localhost:${port}`)
    })
    


    응용 프로그램을 실행하고 지정된 포트를 확인하십시오.

    node app.js
    


    설정 수도사



    Monk는 mongodb 데이터베이스와 인터페이스하는 데 사용하는 라이브러리가 될 것입니다.

    가져오도록 합시다. 그런 다음 시스템에서 실행 중인 mongodb 서버에 연결합니다.

    포트는 27017일 가능성이 높습니다. 확실하지 않은 경우 mongodb 데몬을 참조하십시오.

    💡 Make sure you have the mongodb deamon running on your system.



    다음으로 할 일은 컬렉션 변수를 만들고 이 개체에 대한 모든 작업을 수행할 작업 컬렉션으로 설정하는 것입니다.

    그런 다음 애플리케이션이 데이터베이스에 성공적으로 연결되었을 때 알려주는 간단한 로그를 실행합니다.

    //import monk
    const monk = require("monk")
    
    //connect to mongo database
    const dbUrl = "localhost:27017/crud_api"
    const db = monk(dbUrl)
    
    // this collection variable will have the collection we'll be working with
    const collection = db.get("documents")
    
    //Notifies when the database is connected successfully
    db.then(() => {
      console.log(`Database connected sucessfully`)
    })
    


    CRUD 경로



    데이터베이스에서 모든 문서 가져오기




    app.get("/", async (req, res) => {
      //Get all documents in the data variable using the collection.find() method
      const data = await collection.find()
      res.send(data)
    })
    


    컬렉션의 모든 문서를 반환하는 인수 없이 collection.find() 메서드를 호출합니다.

    메서드는 나중에 응답으로 보내는 객체 배열로 확인되는 약속을 반환합니다.

    ID가 있는 하나의 문서 찾기




    //Get a Specific Document with provided ID
    app.get("/:id", async (req, res) => {
      //Find the document with the given id
      try {
        const document = await collection.findOne({
          _id: req.params.id,
        })
    
        //Send the found document in the response
        res.send(document)
      } catch (err) {
        //Incase of an errror send a 404 NOT FOUND
        res.status(404).send({ error: "Document Not Found" })
      }
    })
    


    이것과 매우 유사합니다. 이번에는 문서를 찾기 위한 필터가 포함된 객체로 collection.findOne() 메서드를 호출합니다. 이 경우 아이디만 있으면 됩니다.

    이것은 또한 우리가 응답으로 보내는 발견된 문서로 해석되는 약속을 반환합니다.

    오류가 발생하면 오류 메시지와 함께 404 not found 상태 코드를 보냅니다.

    DB에 문서 삽입



    POST 및 PUT 메서드를 작성하기 전에 유효성 검사를 구현해야 합니다.

    조이 및 요청 스키마 설정



    Joi는 요청 유효성 검사를 처리하는 데 사용할 라이브러리입니다.

    // Joi Setup
    const Joi = require("joi")
    
    // Request Schema For the Post Method
    const BookPostSchema = Joi.object({
      title: Joi.string().required(),
      author: Joi.string().required(),
      length: Joi.number().integer(),
      rating: Joi.number().max(5),
    })
    


    이 스키마 개체는 POST 메서드에서 들어오는 데이터의 유효성을 검사하는 데 사용됩니다.

    Post 메서드에서 데이터 유효성 검사

    //Insert a single document in the database
    app.post("/", async (req, res) => {
      try {
        //Validate the request body
        const requestData = await BookPostSchema.validateAsync(req.body)
        //Insert it in the Database
        const insertedData = await collection.insert(requestData)
        //Send a 201 (Created) status code and the newly created data object
        res.status(201).send(insertedData)
      } catch (error) {
        //In case of an error send the error object along with a 400 (Bad Request) status code
        res.send(error)
      }
    })
    


    put 메소드에 대한 요청 스키마

    // Request For the Put Method Schema
    const BookUpdateSchema = Joi.object({
      title: Joi.string(),
      author: Joi.string(),
      length: Joi.number().integer(),
      rating: Joi.number().max(5),
    })
    


    이 스키마 개체는 PUT 메서드에서 들어오는 데이터의 유효성을 검사하는 데 사용됩니다.

    경로를 넣어




    //Update a Single Document
    app.put("/:id", async (req, res) => {
      try {
        //Validate the request body
        const requestData = await BookUpdateSchema.validateAsync(req.body)
        //Find the document with the given id and update with the request data
        const updatedDocument = await collection.findOneAndUpdate(
          {
            _id: req.params.id,
          },
          { $set: requestData }
        )
    
        //if The document is found and updated
        if (updatedDocument) {
          //Send the updated document in the response
          res.send(updatedDocument)
        } else {
          //Otherwise send a 404 Not FOUND error code
          res.status(404).send({ error: "Document Not Found" })
        }
      } catch (error) {
        //This catch block catches errors from the validation
        //Which we send as the response
        res.send(error)
      }
    })
    


    경로 삭제




    //Delete a Single Document
    app.delete("/:id", async (req, res) => {
      //Delete the document with the provided id
      const deletedDocument = await collection.findOneAndDelete({
        _id: req.params.id,
      })
    
      //If the Document is found
      if (deletedDocument) {
        //Send a success message and the deleted document in the response
        res.send({
          message: "Document Deleted Succesfully",
          deletedDocument: deletedDocument,
        })
      } else {
        //Otherwise send an error
        res.send({ error: "Document not found" }).status(404)
      }
    })
    


    그리고 그게 다야! MongoDB 데이터베이스에서 CRUD 작업을 수행하기 위해 Node 및 Express로 작성된 매우 간단한 API입니다.

    GitHub에서 프로젝트 다운로드:



    https://github.com/SwarnimWalavalkar/mongo-node-crud-api

    추가 읽기:



    수도사 JS 문서: https://automattic.github.io/monk/

    조이 문서: https://joi.dev/api/

    Express JS 문서: https://expressjs.com/en/4x/api.html

    노드 JS 문서: https://nodejs.org/en/docs/

    MongoDB 노드 드라이버 문서: https://docs.mongodb.com/drivers/node/

    좋은 웹페이지 즐겨찾기