1. 개요
이번엔 게시글 상세 페이지에서
수정 버튼을 누르면 수정 페이지로 넘어가고,
수정 페이지에서 서버로 수정 요청을 해볼거임
서버에 수정 요청을 할때는 PUT 요청을 해야 함
우리는 할 일을 생성할때
<form style="margin: 20px" action="/add" method="POST">
form 태그에다가 이렇게 action과 method를 설정해줬음
근데 HTML에서는 POST와 GET요청만 가능하기 때문에
PUT 요청은 HTML에서 바로 할 수 없음
그럼 뭐 어떻게 해야할까?
2. method-override
HTML에서도 꼼수로 PUT요청 할 수 있는데
라이브러리를 하나 설치해야 함
npm install method-override
설치 다 했으면 server.js에 아래 코드 추가해야 함
// method-override 사용 설정
const methodOverride = require('method-override')
app.use(methodOverride('_method'))
이 코드는 method-override 라이브러리를 사용하겠다는 뜻입니당
3. 코드 작성
(1) server.js
// /edit/:id로 요청 오면 GET 처리 가능
app.get('/edit/:id', function(요청,응답){
db.collection('post').findOne({_id : parseInt(요청.params.id)}, function(에러, 결과){
console.log(결과);
// post라는 변수에 DB에서 찾은 데이터를 집어넣음
응답.render('edit.ejs', {post : 결과})
});
})
// /edit으로 요청 오면 PUT 처리 가능
app.put('/edit', function(요청, 응답){
// 특정 데이터를 찾아서 변경할 데이터로 SET(update역할)해주면 됨
// 요청.body.id는 body태그에서 name이 id인 값을 가져오는 거임
db.collection('post').updateOne({_id : parseInt(요청.body.id)}, { $set : { 제목: 요청.body.title, 날짜 : 요청.body.date}}, function(에러, 결과){
console.log('수정 완료');
// 수정 완료시 /list로 보내줌
응답.redirect('/list')
});
})
일단 두가지 기능을 만들건데
우선은 특정 글에서 수정 버튼을 누르면
'/edit/글번호' 라는 URL로 GET 요청을 받을거임
그담에 edit.ejs파일을 렌더링 해줄겨
두번째 기능은
수정 페이지에서 수정작업을 완료하면
'/edit' 라는 URL로 PUT 요청을 받을거임
그럼 HTML문서에서 데이터를 찾아올 수 있는
body-parser 라이브러리를 이용해서 해당 글번호를 가져옴
참고로 이미 edit.ejs에다가
<input type="text" value="<%= post._id %>" name="id" style="display: none;">
이렇게 input 태그와 value, name 옵션을 이용해서 해당 게시글의 id값을 넣어두었음
자 그럼 해당 글번호를 가져왔으니 DB에다가 수정 요청을 보내야 함
db.collection('post').updateOne({_id : parseInt(요청.body.id)}, { $set : { 제목: 요청.body.title, 날짜 : 요청.body.date}}, function(에러, 결과){
db의 post라는 collection에다가 updateOne 요청을 보냄(데이터 수정 요청)
updateOne에는 2개의 파라미터를 넣어줘야 하는데
첫번째 파라미터에는 바꿀 데이터의 인식 값을 넣어줌
여기서는 body-parser로 찾아온 id값이 되겠슴
두번째는 $set을 이용해 DB에다가 연산해줄 값을 넣어줌
쉽게 말하면 뭘로 바꿀지 넣어주는 거임
우리는 제목과 날짜를 수정하겠다고 코드를 짜볼게여
그담에는 콜백함수 넣어주면 됨
참고로
redirect옵션으로 해당 작업이 끝난 뒤 어떤 페이지로 이동시켜줄지 정할 수 있음
'코딩 > NodeJS' 카테고리의 다른 글
nodejs에서 mypage 구현하기 (0) | 2023.01.29 |
---|---|
nodejs에서 Session-based 회원가입 구현하기 (0) | 2023.01.28 |
nodejs로 mongodb랑 데이터 주고받기 (0) | 2023.01.25 |
nodejs랑 mongodb 연결해보기 (1) | 2023.01.24 |
nodejs에서 웹으로부터의 요청 처리하기(feat. post) (0) | 2023.01.23 |