---
# System prepended metadata

title: 第七週主線任務與講義
tags: [Node.js 直播班 - 2022 春季班]

---

---
tags: Node.js 直播班 - 2022 春季班
---

# 第七週主線任務與講義
* 錄影
* 點名，[報到]() Code：`ima6zTPew9I4`
* 每日助教服務上線！
* [線上範例程式碼 week7 branch](https://github.com/gonsakon/express-week4-sample)


## imgUr 介接流程
* [教學文件](https://israynotarray.com/nodejs/20220517/432259079/)

## 申請步驟
1. 申請 imgur 服務
2. 建立一個 Album 相簿，並取得 ID
3. 申請 [imgur 應用程式](https://api.imgur.com/oauth2/addclient)，獲得 client_id 和 client_secret
4. 申請 refresh token：`https://api.imgur.com/oauth2/authorize?client_id=${Client ID}&response_type=token`

## multer
* express 所設計的 middleware
* [multer 官方文件](https://github.com/expressjs/multer)
* [簡體教學](https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md)


## 注意細節
* 留意 heroku 記憶體空間，[免費 512 MB](https://devcenter.heroku.com/articles/dyno-types)

## 新增與取消讚

``` =JavaScript
//  models/postsModel.js
likes: [
        { 
          type: mongoose.Schema.ObjectId, 
          ref: 'User' 
        }
      ]
// post router
router.post('/:id/likes',isAuth, handleErrorAsync(async function(req, res, next) {
  const _id = req.params.id;
    await Post.findOneAndUpdate(
        { _id},
        { $addToSet: { likes: req.user.id } }
      );
      res.status(201).json({
        status: 'success',
        postId: _id,
        userId: req.user.id
      });
}));

router.delete('/:id/likes',isAuth, handleErrorAsync(async(req, res, next) =>  {
  const _id = req.params.id;
  await Post.findOneAndUpdate(
      { _id},
      { $pull: { likes: req.user.id } }
    );
    res.status(201).json({
      status: 'success',
      postId: _id,
      userId: req.user.id
    });

}))
```

## 按讚列表功能、取得個人貼文列表
* 取得個人貼文列表
``` =JavaScript
router.get('/user/:id', handleErrorAsync(async(req, res, next) =>  {
  const user = req.params.id;
  const posts = await Post.find({user});

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

* 取得按讚列表
``` =JavaScript
const Post = require('../models/postsModel');
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
  });
}))

```


## 第七週主線任務

* [第七週主線任務網址]()