글작성 페이지에서 글을 작성해서 서버로 글을 보낸다.
서버는 글을 잘 썼나 확인[검사는 서버가 담당하는게 좋음]
서버는 확인 후 DB에 저장
글 작성해서 서버로 글을 보낸다.
<body>
<form class="form-box" action="/add" method="POST">
<!-- action : form을 전송할 url method : http method-->
<h4>글쓰기</h4>
<input name="title">
<input name="content">
<button type="submit">전송</button>
</form>
</body>
server.js 에서 유저가 보낸 정보를 서버에서 쉽게 출력하고 싶을때
//요청.body 사용하려면 필요
app.use(express.json())
app.use(express.urlencoded({extended:true}))
//input을 받을 페이지를 렌더링
app.get('/write', (요청, 응답) =>{
응답.render('write.ejs')
})
//해당 페이지에서 button을 누르면 add url 실행
app.post('/add', async(요청, 응답) => {
console.log(요청.body) // 요청.body 유저가 input으로 보낸 데이터를 출력해볼수 있음
await db.collection('post').insertOne({title : 요청.body.title, content : 요청.body.content})
응답.redirect('/list')
// 응답.send('작성완료')
})
유저가 제목을 안적고 글을 전송한다면?
app.post('/add', async (요청, 응답) => {
if (요청.body.title == '') {
응답.send('제목안적었는데')
} else {
await db.collection('post').insertOne({ title : 요청.body.title, content : 요청.body.content })
응답.redirect('/list')
}
})
try {
await db.collection('post').insertOne(어쩌구)
} catch (e) {
console.log(e)
응답.send('DB에러남')
}
:어쩌구 이런 식으로 URL을 작성할 수가 있는데
이게 뭔 뜻이냐면 "이 자리에 유저가 아무 문자나 입력하면~" 이라는 뜻
app.get('/detail/:aaaa', (요청, 응답) => {
응답.send('detail.ejs')
})
<div class="detail-bg">
<h4>글제목임</h4>
<p>글내용임</p>
</div>
const { ObjectId } = require('mongodb')
//ObjectId를 쓰기위해 가져와야함
app.get('/detail/:id', async(요청, 응답)=>{
console.log(요청.params)
await db.collection('post').findOne({_id : new ObjectId('666308bcd58fe9669e0becbe')})
응답.send('detail.ejs')
})
가져온 데이터를 detail.ejs에 전달하여 화면을 구성한다.
app.get('/detail/:id', async (요청, 응답) => {
let result = await db.collection('post').findOne({ _id : new ObjectId(요청.params.id) })
응답.render('detail.ejs', { result : result })
})
해당게시글의 제목을 눌렀을때, 상세페이지로 이동하게 만들기
(list.ejs)
<body class="grey-bg">
<%- include('nav.ejs')%>
<% for (var i = 0; i < 글목록.length; i++){ %>
<div class="white-box">
<div class="list-box">
<h4><a href="/detail/<%=글목록[i]._id%>"><%= 글목록[i].title %></a></h4>
<p>글내용임</p>
</div>
</div>
<% } %>
</body>
app.get('/detail/:id', async (요청, 응답) => {
try {
let result = await db.collection('post').findOne({ _id : new ObjectId(요청.params.id) })
if (result == null) {
응답.status(400).send('그런 글 없음')
} else {
응답.render('detail.ejs', { result : result })
}
} catch (e){
응답.send('이상한거 넣지마라')
}
})
에러 종류
HTTP response status codes - HTTP | MDN
출처 : 코딩 애플 - node.js강의