# 🏅 Day 14 - 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 / 答案 |
|:-------------:|:-----------------:|
| xxx | [CodePen]() |
| 苡安 | [hackmd](https://hackmd.io/@L7K9-66lSeagS28AP0_GjQ/BkQgsFVWC) |
| Chia Pin | [CodePen](https://codepen.io/joker-cat/pen/bGJOKQb) |
| Aida | [CodePen](https://codepen.io/ada23410/pen/RwOEJEE?editors=0010) |
| jenny7532 | [CodePen](https://codepen.io/wei-chen-wu/pen/MWRZBvO) |
| Tiya | [CodePen](https://codepen.io/Tiya_blank/pen/rNbQPbY) |
| Hank | [CodePen](https://codepen.io/tw1720/pen/mdgaGgq) |
|wei|[CodePen](https://codepen.io/Wei-the-sasster/pen/BaEvqpv?editors=0010)|
|william_hsu|[CodePen](https://codepen.io/william8815/pen/jORXRJX)|
| runweiting |[CodePen](https://codepen.io/weiting14/pen/JjVwqvr)|
|cho|[CodePen](https://codepen.io/cho195/pen/eYobqBb)|
|tung030374|[CodePen](https://codepen.io/tung__u/pen/jORXgjd)|
| shuantt | [CodePen](https://codepen.io/th-tseng/pen/dyLaMjd)|
|群嘉|[CodePen](https://codepen.io/efzdamnp-the-lessful/pen/dyLaNVa?editors=0010)|
|Lobinda|[CodePen](https://codepen.io/Lobinda/pen/oNOmVjd)|
|ej_chuang|[CodePen](https://codepen.io/EJChuang/pen/JjVzOyp)|
|Ciel|[CodePen](https://codepen.io/nycteachen/pen/eYoodyr)|
| Henry | [HackMD](https://hackmd.io/A6VVhoTfSBmNIbE05dVKXQ) |
| 瑀君 |[HackMD](https://hackmd.io/@sh5ojkmt/SkCP-HR-0)|
| Theodore 0501 |[Codepen](https://codepen.io/GustavoFringgg/pen/yLrWzox)|
| william威良 |[Codepen](https://codepen.io/snowman12320/pen/NWmVwWL?editors=1010)|
| Benson |[Codepen](https://codepen.io/nosneb83/pen/WNWBXwL)|
|mei|[Codepen](https://codepen.io/l_umei/pen/wvZbpXG)|
|2魚 |[Codepen](https://codepen.io/ijrekmsn-the-sans/pen/PogrYmb)|
| albertyang3576 |[Codepen](https://codepen.io/albertyang3576/pen/poBXrey?editors=0010)|