---
# System prepended metadata

title: "\U0001F3C5 Day 24 - req.query 篩選網址參數"
tags: [2025 Node.js 後端工程師培訓營]

---

# 🏅 Day 24 - req.query 篩選網址參數 
除了先前使用 `req.params` 取得動態路由外，也可在 url 帶入相關資訊，再使用 `req.query` 取出網址列的參數

舉例：`/posts?page=1&count=10` （貼文頁面篩選第一頁前 10 筆資料）
其中 `?` 用來連接欲帶入的參數 `page` 及 `count`，`=` 前後分別為參數名稱（`page`）與參數的值（`1`），不同參數之間使用 `&` 分隔

當使用者造訪此網址時， express 可以使用 req.query 取出網址列的這些參數 
```javascript=
app.get('/posts?page=1&count=10)', function(req, res) {
  console.log(req.query)
  ...
});

// req.query
{ 
  page: 1,   // 頁數
  count: 10  // 幾筆資料
}
```
使用 `req.query.page` 或 `req.query.count` 就可以取出需要的資訊做相關處理

`req.query` 常見的應用是搜尋關鍵字，當使用者輸入關鍵字後，會將關鍵字帶到網址列中，伺服器接收到，再藉由 `req.query` 取出，尋找資料庫中符合其關鍵字的資料，並回傳至客戶端

```
GET '/posts?keywords=...' // 通常會以 keywords 表示搜尋關鍵字
```
```javascript=
app.get('/posts', function(req, res) {
  const keywords = req.query.keywords
  const results = await Post.find({ content: /.../ }); // 使用 mongoose 搜尋資料庫中貼文內容含有 req.query.keywords 的資料
  res.status(200).json({
    status: 'success',
    results: results.length,
    data: { // 回傳資料
      results
    }
  });
});
```


### 參考資源

- [Express - req.query](https://expressjs.com/zh-tw/api.html#req.query)
- 課程影音「Express - Node.js Web 應用程式架構」

題目
---
請將以下 url 中的參數使用 `req.query` 取出，並回傳取出的參數（可自行建立 express 專案，先在 app.js 練習即可）
```javascript=
'http://localhost:3000/posts?keywords=我&filter=today' // 在 POSTMAN 發出 GET 請求

app.get('/posts', function(req, res) {
  // 取出參數
  /* 請在此填寫答案*/
  
  res.status(200).json({
    status: 'success',
    data: {
      /* 請在此填寫答案*/      
    }
  });
});
```


## 回報流程

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

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

<!-- 解答：  
app.get('/posts', function(req, res) {
  // 取出參數
  const keywords = req.query.keywords;
  const filter = req.query.filter
  res.status(200).json({
    status: 'success',
    data: {
      keywords,
      filter
    }
  });
});
-->

回報區
---
<!-- 
將答案貼至下方表格內，格式：
| Discord 暱稱 | [CodePen](連結) |
-->
|    Discord    |   CodePen ／ 答案  |
|:-------------:|:-----------------:|
| bian_yang_mofa | [CodePen](https://codepen.io/cssf998811/pen/gbObWGL?editors=0010) |
| adengg | [CodePen](https://codepen.io/Osases/pen/VYwYbRj?editors=0012) |
|janetlai|[CodePen](https://codepen.io/eiddkqxz-the-builder/pen/KwKwqpb?editors=1111)
| poyi | [CodePen](https://codepen.io/poyi-the-flexboxer/pen/bNGNWdg) |
| Tau | [CodePen](https://codepen.io/Tau-Hsu/pen/OPJPdKx?editors=0010) |
| sian | [CodePen](https://codepen.io/uxitysjl-the-flexboxer/pen/bNGdzbV?editors=0010) |
| sui_hsilan | [CodePen](https://codepen.io/suihsilan/pen/NPWGNpr?editors=0010) |
| helena | [CodePen](https://codepen.io/helena27/pen/RNwWajb) |
| JC | [CodePen](https://codepen.io/lifetimingwhisper/pen/XJWmRYY) |
| yutzu | [CodePen](https://codepen.io/dtafsrmf-the-lessful/pen/mydVdqO?editors=0010) |
|ZoeKang|[CodePen](https://codepen.io/byehywmx-the-animator/pen/wBvMjwy)
|Shiang|[CodePen](https://codepen.io/shiang29/pen/LEYRaRQ?editors=0010)
|HarryKuo|[CodePen](https://codepen.io/harry_kuo/pen/GgRNmVG?editors=0010)|
| hsin yu | [CodePen](https://codepen.io/tina2793778/pen/ogNZyMX)|
| li wei-min | [CodePen](https://codepen.io/leewayne/pen/OPJmWgQ)|
|wuyuli_21403|[CodePen](https://codepen.io/Job-Wilhelm/pen/RNwgdmg)|

