EJS 활용 블로그 - DB 연결

김주언·2022년 6월 2일
0

WEB - Basic

목록 보기
7/10

게시글 MongoDB에 저장하기

프로젝트에 DB연결하기

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>

블로그 메인 페이지에 DB 내용 출력하기

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 클릭 시 전체 내용 출력

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를 받아서 출력한다.

profile
학생 점심을 좀 차리시길 바랍니다

0개의 댓글