NodeJS로 MongoDB CRUD API 빌드
🎯 목표:
👨💻 사용된 기술:
📃 전제 조건:
난이도: 🡆중급
설정
빈 디렉토리에 새 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/
Reference
이 문제에 관하여(NodeJS로 MongoDB CRUD API 빌드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/swarnimwalavalkar/build-a-mongodb-crud-api-with-nodejs-36c4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)