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를 만들 수 있음
'컴퓨터 프로그래밍 > Node.js' 카테고리의 다른 글
[Node.js] AJAX, query string (0) | 2023.11.08 |
---|---|
[Node.js] 수정기능 만들기 2 MongoDB 수정문법 (0) | 2023.11.08 |
[Node.js] 상세페이지 만들기 2 (링크 만들기) (0) | 2023.11.07 |
[Node.js] 상세페이지 만들기1 (URL parameter) (0) | 2023.11.07 |
[Node.js] 글 작성기능 만들기 2 (insertOne, 예외 처리) (0) | 2023.11.07 |