# express.js
[express](expressjs.com/)
----
express.js 是一個網頁應用程式框架
---
# 可以幹麻?
----
架設網站?
----
解析請求?
----
解析 cookie
----
回應頁面?
----
# 都不行
---
# 那他可以幹麻?
----
根據你的請求叫不同的人(middleware)做事
---
# middleware
----
什麼是 middleware?
----
middleware 是可以處理 http 請求和 request, response 的函式
---
有哪些現成的 middleware 可以用?
[middlewares](https://expressjs.com/en/resources/middleware.html)
----
不想記這麼多怎麼辦?
----
用 express-generator
---
# express-generator
----
```
$ npm i express-generator -g
$ express -e [app name]
```
---
回到 middleware
---
# 結構
----
```javascript=
function myMiddleware(req, res, next){
// do something
next();
}
```
---
## res
----
http 請求的相關參數和方法
----
常見的有
| name | description |
| ---------- | -------------------------------- |
| req.body | post 方法所傳遞的資料 |
| req.query | get 方法所傳遞的參數 |
| req.cookie | 網站儲存的 cookie |
| req.params | 從路由設定的參數(":"開頭的)注1 |
| req.get() | 取得請求的 http header |
----
注1
```javascript=
app.get('/user/:id', (req, res, next) => {
console.log(req.params.id);
});
// http://localhost:3000/user/simba-fs
// => "simba-fs"
```
---
# res
----
http 回應相關的方法
----
常見的有
| name | description |
| ----------------- | -------------------------------------------------- |
| res.cookie() | 設定 cookie |
| res.clearCookie() | 清除 cookie |
| res.download() | 傳送一個檔案給 client 下載 |
| res.append() | 加一段內容在將要發送的佇列裡 |
| res.end() | 發送佇列中的內容 |
| res.send() | 送出一個字串、JSON或物件(就是)什麼都可以放的意思 |
| res.render() | 用樣板引擎染一個指定的頁面並送出 |
| res.redirect() | 重新導向 |
| res.status() | 設定狀態碼 |
---
# next
這是一個函式,沒有任何參數
執行後會將操作權交給下一個中介軟體
通常配合`return next()`來使用
避免後續會有其他的操作
---
# 載入中介軟體
----
`app.use()`
`router.use()`
{"metaMigratedAt":"2023-06-15T03:51:24.818Z","metaMigratedFrom":"YAML","title":"express.js","breaks":true,"contributors":"[{\"id\":\"e9395e03-a75e-451d-8392-22ff7e9c3ef5\",\"add\":2302,\"del\":165}]"}