---
# System prepended metadata

title: "\U0001F3C5 Day 40 - 實作取得所有貼文並帶入 comment"
tags: [Node.js 直播班 - 2024 春季班]

---

# 🏅 Day 40 - 實作取得所有貼文並帶入 comment

練習整合運用先前提到的技巧：
- router
- Moogoose find()、populate()、sort()

實作出設計稿 `3-2.全體動態牆-有留言` 頁面的「取得所有貼文並帶入 comment 功能」

### 開始實作
- GET `/posts` 路由，不需登入即可觀看所有貼文
- 使用 `populate()` 關聯 comments 欄位
- 取得貼文時需要顯示使用者的名稱 `name` 與圖片 `photo`、留言的內容 `comment` 與留言的使用者 `user`
- 將取得的貼文依照 `createdAt` 排序
- 回傳成功訊息及貼文資料

依照上方需求完整以下程式碼，補上 `...` 的部分

`app.js`
```javascript=
const postsRouter = require('./routes/posts');
app.use('/posts', postsRouter);
```

`routes/posts.js`
```javascript=
router....('...', async (req, res, next) => {
  const post = await Post.find()....({
    path: 'user',
    select: '... ...'
  }).populate({
    path: 'comments',
    select: '... ...'
  }).sort('...');

  res.status(200).json({
    status: 'success',
    ...
  })
});
```


## 回報流程

將答案寫在 CodePen 並複製 CodePen 連結貼至底下回報就算完成了喔! 
解答位置請參考下圖（需打開程式碼的部分觀看）

![](https://i.imgur.com/vftL5i0.png)

<!-- 解答：  

`routes/posts.js`
```javascript=
router.get('/', async (req, res, next) => {
  const post = await Post.find().populate({
    path: 'user',
    select: 'name photo'
  }).populate({
    path: 'comments',
    select: 'comment user'
  }).sort('createdAt');

  res.status(200).json({
    status: 'success',
    post
  })
});
```

-->




回報區
---
<!-- 
將答案貼至下方表格內，格式：
| Discord 暱稱 | [CodePen](連結) |
-->

|    Discord    |   CodePen ／ 答案  |
|:-------------:|:-----------------:|
| xxx | [CodePen]() |
| 苡安 | [hackmd](https://hackmd.io/@L7K9-66lSeagS28AP0_GjQ/H1IoAlV4C) |
| Chia Pin | [CodePen](https://codepen.io/joker-cat/pen/VwOmopW) |
| wei | [CodePen](https://hackmd.io/@xu7yoa5cSsqaron7h9XhUw/SkzxGLVNA)|
| runweiting | [CodePen](https://codepen.io/weiting14/pen/RwmKrjx) |
| william威良 | [CodePen](https://codepen.io/snowman12320/pen/KKLavPG) |
| jenny7532 | [CodePen](https://codepen.io/wei-chen-wu/pen/jOoBbaG) |
| mei | [CodePen](https://codepen.io/l_umei/pen/bGyqYEp)|
| Hank | [CodePen](https://codepen.io/tw1720/pen/QWRWgex)|


