# 🏅 Day 34 - 實作取得按讚貼文列表 練習整合運用先前提到的技巧: - router - Moogoose find()、populate() - JWT middleware 實作出設計稿 `8.我按讚的貼文` 頁面的「取得使用者按讚貼文列表功能」 ### 流程 當使用者按讚,將按讚的使用者 ID 存到該則貼文資料 likes 陣列中,在使用者的個人頁面可以嘗試取得貼文資料中 likes 欄位含有該使用者 ID 的貼文 > 實作前準備 > - 預先新增一些測試的貼文資料以及註冊新增使用者資料,在 MongoDB Compass 將已註冊的使用者 ID 加入貼文的 likes 欄位中 > :::spoiler 如圖 > ![](https://i.imgur.com/OWLguRc.png) > ::: ### 開始實作 - 設計一個 GET `/users/getLikeList` 路由,需登入才能請求貼文資料 - 當使用者登入並驗證 JWT 正確,尋找資料庫中 likes 欄位包含該使用者 ID 的貼文 - 找出的貼文需顯示使用者的`name`及 `_id` - 回傳成功訊息及貼文資料 依照上方需求完整以下程式碼,補上 `...` 的部分 `app.js` ```javascript= const usersRouter = require('./routes/users'); app.use('/users', usersRouter); ``` `routes/users.js` ```javascript= const router = express.Router(); const Post = require('../models/postsModel'); const { isAuth } = require('../service/auth'); ....get('...', ..., handleErrorAsync(async (req, res, next) => { const likeList = await Post....({ likes: { $in: [...] } })....({ path: "user", select: "... ..." }); res.status(200).json({ status: 'success', ... }); })) module.exports = router; ``` ## 回報流程 將答案寫在 CodePen 並複製 CodePen 連結貼至底下回報就算完成了喔! 解答位置請參考下圖(需打開程式碼的部分觀看) ![](https://i.imgur.com/vftL5i0.png) <!-- 解答: `app.js` ```javascript= const usersRouter = require('./routes/users'); app.use('/users', usersRouter); ``` `routes/users.js` ```javascript= const router = express.Router(); const Post = require('../models/postsModel'); const { isAuth } = require('../service/auth'); router.get('/getLikeList', isAuth, handleErrorAsync(async (req, res, next) => { const likeList = await Post.find({ likes: { $in: [req.user.id] } }).populate({ path: "user", select: "name _id" }); res.status(200).json({ status: 'success', likeList }); })) module.exports = router; ``` --> 回報區 --- <!-- 將答案貼至下方表格內,格式: | Discord 暱稱 | [CodePen](連結) | --> | Discord | CodePen / 答案 | |:-------------:|:-----------------:| | xxx | [CodePen]() | | 苡安 | [hackmd](https://hackmd.io/@L7K9-66lSeagS28AP0_GjQ/rJopM_YmR) | | jenny7532 | [CodePen](https://codepen.io/wei-chen-wu/pen/mdYPWzy) | | wei | [CodePen](https://hackmd.io/@xu7yoa5cSsqaron7h9XhUw/BJw6BhKmR)| | Chia Pin | [CodePen](https://codepen.io/joker-cat/pen/gOJrxLV)| | william威良 | [CodePen](https://codepen.io/snowman12320/pen/QWRNoBX)| | runweiting | [CodePen](https://codepen.io/weiting14/pen/QWRGMzW)| | mei| [CodePen](https://codepen.io/l_umei/pen/wvbgVOQ)| | Fabio20 | [CodePen](https://codepen.io/fabio7621/pen/ZENeRbG?editors=1010) | |Lobinda|[HackMD](https://hackmd.io/@Lobinda/H10o6taVA)| |Hank|[CodePen](https://codepen.io/tw1720/pen/wvbveLp)|