VaIice의 이야기

[Node.js] 상세 페이지 만들기 본문

[Node.js]

[Node.js] 상세 페이지 만들기

VaIice 2024. 7. 14. 22:51

 1. URL 파라미터 만들기 

// server.js

// :id에 1, 2, 3, ... 등 아무 ID 입력
app.get('/detail/:id', async (request, response) => {
 
})

 

 

 2. find, findOne 

 
// server.js

// :id에 1, 2, 3, ... 등 아무 ID 입력
app.get('/detail/:id', async (request, response) => {
  let result = await db.collection('main').findOne({ _id: new ObjectId('6693af7f35c1e6dfdc3c05b2')})
  response.render('detail.ejs', {posts: result})  
})

 

 findOne: 일치하는 데이터 1개 탐색 

find: 일치하는 모든 데이터 탐색 

 

 

 3. ObjectId 


const { MongoClient, ObjectId } = require('mongodb')

 

 코드 추가해야 사용 가능 

 

 
  let result = await db.collection('main').findOne({ _id: new ObjectId('6693af7f35c1e6dfdc3c05b2')})
 

 

 ObjectId 앞에 new 추가 

 

 4. URL params 


app.get('/detail/:id', async (request, response) => {
  let result = await db.collection('main').findOne({ _id: new ObjectId('6693af7f35c1e6dfdc3c05b2')})
  response.render('detail.ejs', { post: result })  
})

 

 request.params 

 

 

 4. ID 찾기 

// server.js
 
app.get('/detail/:id', async (request, response) => {
// id가 1이면, 0번째 자료 return
  let result = await db.collection('main').find().skip(request.params.id - 1).limit(1).toArray();
  response.render('detail.ejs', {post: result[0]})  
})
// detail.ejs
 
    <div class="detail-bg">
        <h4><%= JSON.stringify(post.title)%></h4>
        <p><%= JSON.stringify(post.content)%></p>
    </div>
 

 

 request.params 

 HTML에서의 JS 배열, 객체 사용 -> JSON.stringify() 

 

 

 5. 링크 만들기 

// main.ejs
 
    <% for(let i = 0; i < posts.length; i++) {%>
      <a href="/detail/<%-i%>">
       <div class="form-box">
         <%= JSON.stringify(posts[i].title)%>
       </div>
       </a>
      <% } %>
 
// server.js
 
app.get('/detail/:id', async (request, response) => {
  let id = parseInt(request.params.id)
  let result = await db.collection('main').find().skip(id).limit(1).toArray();
  response.render('detail.ejs', { post: result[0] })  
})

 

 /detail/<%-i%>에서 i는 string 

 parseInt로 정수 변환 후 배열 함수 삽입 

 

 

 요약 

 URL 파라미터 request.params 

 게시물 한 개 찾기 findOne() 

 게시물 여러 개 찾기 find()