컴퓨터 프로그래밍/Node.js

[Node.js] 수정기능 만들기 1

한33 2023. 11. 8. 01:18

 

server.js

app.get('/edit/:id', async (요청, 응답) => {
  let result = await db.collection('post').findOne({ _id: new ObjectId(요청.params.id) })
  console.log(result)
  응답.render('edit.ejs', { result: result })
})

app.post('/edit', async (요청, 응답) => {


  try {
    let result = await db.collection('post').updateOne({ _id: new ObjectId(요청.body.id) }, { $set: { title: 요청.body.title, content: 요청.body.content } })
    응답.redirect('/list')
  } catch (e) {
    console.log(e)
    응답.status(404).send('건들면안됨')
  }
})

 

edit.ejs

<form class="form-box" action="/edit" method="POST">
        <h4>수정하기</h4>
        <input name="id" value="<%= result._id%>" style = 'display : none'>
        <input name="title" value="<%= result.title%>">
        <input name="content" value="<%= result.content%>">
        <button type="submit">전송</button>
    </form>

 

1. 글마다 있는 수정버튼 누르면 글 수정페이지 이동

<a href="/edit/<%= 글목록[i]._id%>">✏️</a>

 

우선 수정기능 페이지로 들어가기 위해서 위 코드를 입력해주었다.

 

2. 수정페이지엔 글의 제목과 내용이 이미 채워져있어야함

 

3. 전송누르면 그걸로 기존에 있던 document를 수정해줌 

 

db.collection('post').updateOne( {수정할document정보}, {$set: {덮어쓸내용}}) 

DB에 있던 document 하나를 수정하고 싶으면 이거 쓰면 됨

db.collection('post').updateOne( { _id : 2 }, {$set: { a : 3 }}) 

예를 들어 이렇게 작성하면 _id : 2를 가진 document를 찾아서 a 항목을 3으로 수정해줌.

 

 

 

1. DB에있던 document 하나 수정하려면 db.collection().updateOne()

2. 수정할 때 $set연산자 쓰면 덮어쓰기, $inc는 기존에 있던 숫자를 원하는 만큼 증감 가능

3. 여러개 document 한 번에 수정하려면 updateMany 쓰면 되는데 거기서는 $gt같은걸로 특정조건을 만족하는 document만 필터링해서 수정해버릴 수도 있음

4. 서버에서 어떤 정보가 필요한데 근데 서버에서 찾을 수 없으면

유저에게 보내라고하거나 DB에서 출력해보거나 하면 되는거지 수동적으로 손가락 빨고있으면 안됩니다.

5. method override 사용하면 폼태그에서도 put, delete 요청 날릴 수 있는데 그럼 좀 더 이쁜 API를 만들 수 있음