Node middleware 中介軟體

middleware

從發出請求(Request)之後,到接收回應(Response)這段來回的途徑上,用來處理特定用途的程式
比較常見的Middleware有身份驗證(Identity)、路由(Routing)或回應壓縮(Response Compression)等
middleware function 傳入三個參數,然後輸出想要的資料:

  • 第一個參數是 request
  • 第二個參數是 response
  • 再透過第三個參數 next 把控制權轉移到下一個 middleware

app.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const express = require("express");
const app = express();

app.use((req, res, next) => {
console.log("middleware 守門員");
next();
});

app.get("/", (req, res) => {
res.send('<h1>這是 middleware 練習</h1>' );
});

const port = process.env.port || 3000;
app.listen(port);

Token 例子
middleware新增token.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const verifyToken = (req, res, next) =>
{
const bearerHeader = req.headers.authorization;
if (typeof bearerHeader !== 'undefined') {
const bearer = bearerHeader.split(' '); // 字串切割
const bearerToken = bearer[1]; // 取得 JWT
req.token = bearerToken; // 在response中建立一個token參數
next(); // 結束 Middleware 進入
}
else {
req.send({result:'令牌無效!'})
}
}
//輸出 verifyToken
module.exports = verifyToken;

到要使用Tokn 的router 使用 middleware

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
const express = require('express')
//載入verifyToken
const verifyToken = require('../middleware/token')


//使用verifyToken
router.get('/users', verifyToken,async (req, res) =>{
try {
const users = await User.find({});
res.status(200).json(users);
} catch (error) {
res.status(500).json({message: error.message})
}
})

//使用verifyToken
router.delete('/users/:id', verifyToken,async(req, res) =>{
try {
const {id} = req.params;
const user = await User.findByIdAndDelete(id);
if(!user){
return res.status(404).json({message: `沒有發現任何使用者 ${id}`})
}
res.status(200).json(user );

} catch (error) {
res.status(500).json({message: error.message})
}
})