npm i mongoose
app.js
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/blogDB', { useNewUrlParser: true });
app.js
const postSchema = {
title: String,
content: String
};
const Post = mongoose.model("Post", postSchema);
app.post('/compose')
메서드에서 문서를 생성한다.
app.post('/compose', (req, res) => {
const post = new Post({
title: req.body.postTitle,
content: req.body.postBody,
});
// posts.push(post);
post.save(); // 수정
res.redirect('/');
});
test> show dbs
admin 40.00 KiB
blogDB 40.00 KiB
config 36.00 KiB
local 72.00 KiB
todolistDB 144.00 KiB
test> use blogDB
switched to db blogDB
blogDB> show collections
posts
blogDB> db.posts.find()
[
{
_id: ObjectId("6298a5523c36f3640b8af8e4"),
title: 'test',
content: 'testsfsdfasdasa',
__v: 0
}
]
blogDB>
app.get('/', (req, res) => {
Post.find({}, (err, posts) => {
res.render('home', { homeStartingContent, posts });
});
});
app.post('/compose', (req, res) => {
const post = new Post({
title: req.body.postTitle,
content: req.body.postBody,
});
// post.save()에 콜백함수 추가
post.save((err) => {
if (!err) {
res.redirect('/');
}
});
});
Read More 클릭하면 post._id
값 이용하여 post.ejs 페이지로 이동하기
home.ejs 수정
<a href="/posts/<%=post._id%>">Read More</a>
Read More 앵커태그의 url 내용을 _id
를 전송하도록 변경한다.
app.js 수정
라우트 파라미터로 postId를 받는다. Post.findById(id, 콜백함수)
를 아용하여 post.ejs로 _id
값을 이용하여 찾은 문서 객체를 전송한다.
app.get('/posts/:postId', function (req, res) {
const requestedId = req.params.postId;
Post.findById(requestedId, function (err, foundPost) {
if (err) {
console.log(err);
} else {
console.log('result: ' + foundPost);
res.render('post', { foundPost });
}
});
});
post.ejs에서 foundPost를 받아서 출력한다.