본문 바로가기

Learn/Next.js

Next.js 프로젝트(4)

 

 

 게시글 수정기능

 

 이번엔 CRUD의 Update

 

 Create 랑 별로 다르진 않지만 한가지 더 추가 된 느낌이다.

 

 버튼을 눌렀을 때,

 그 해당 버튼 게시글을 DB에서 꺼내와 수정한 걸 다시 서버로 보내고 그걸 다시 DB에 저장시킨다는 개념

 

  먼저 dynamic route를 사용해서 수정할 URL을 만들어주고 -> 수정페이지를 일일히 만들필요없게

 

 /edit/[id]/page.js

import { connectDB } from "@/util/database.js"  // DB에서 자료 꺼내오기
import { ObjectId } from "mongodb";                   // objectid를 사용

export default async function Edit (props){
    let db = (await connectDB).db('forum');
    let result = await db.collection('post').findOne({ _id: new ObjectId(props.params.id)}) // 맞는 Id의 값을 가져오기
 

    return (
        <div className="p-20">
            <h4>글 수정</h4>
            <form action="/api/post/edit" method="POST">          // 해당 api에 맞게 작성
                <input name="title" placeholder="제목" defaultValue={result.title}></input>  // value만 쓰니 수정이 안됨
                <input name="content" placeholder="내용" defaultValue={result.content}></input>
                <input style={{display:'none'}} name="content" placeholder="내용" defaultValue={result._id.toString()}></input>
                   // ID값을 클라이언트에서 요청하기 위해서 작성
                <button type="submit">수정</button>
            </form>
        </div>
    )
}

 

  update도 create와 마찬가지로 DB의 자료를 바로 수정할 수 없게 서버를 거치도록 해야 한다

 그게 뭐라고? 3tier architecture 란다.

 

 그래서 맞는 /pages/api/post/edit.js를 작성 

 

import { connectDB } from "@/util/database"


export default async function handler(res, req){
    if (res.method == 'POST'){        // 메소드가 POST일 때 -> 요즘은 PATCH를 잘 안쓴다고.. GET과 POST면 충분
        let data = {title : res.body.title, content : res.body.content}
         // id값을 클라이언트에서 받아오기 때문에 새로운 data로 변환
        if (res.body.title == '') {           // 안 쓰여져있을 때
          return req.status(500).json('제목써라')
        }
        let db = (await connectDB).db('forum')
          let result = await db.collection('post').updateOne(         // 여기 중요! 사용법 숙지
            {_id : new Object(res.body._id) }, { $set : data }
          )
          req.redirect(302, '/list')
          console.log(result)
      }
}

 

공식 문서

https://www.mongodb.com/docs/manual/reference/method/db.collection.updateOne/

 

 server에서 DB로 update된 자료를 보내기 위해서 사용해야하는 메소드이다.

 

 

'Learn > Next.js' 카테고리의 다른 글

Next.js (6) static/dynamic rendering/캐싱  (0) 2023.07.08
Next.js (5)  (0) 2023.07.07
Next.js 프로젝트 (3)  (0) 2023.07.04
Next.js 프로젝트 (2)  (0) 2023.07.03
Next.js 프로젝트 (1)  (0) 2023.07.01