路由級中間件
- 創建 const routerMiddleware = require("express").Router()
- 處理 routerMiddleware.get(url,fn) routerMiddleware.post(url,fn)
- 導出 module.exports = routerMiddleware
- 使用 require導入routerMiddleware,然后app.use('/api',routerMiddleware).配置之后url中api路徑下的請求都會進入routerMiddleware中進行匹配處理
路由級中間件處理get請求
app.js
const express = require('express');
const app = express();
const userRouter = require('./6userRouter');
//user路徑下的所有請求到派發到userRouter中處理
app.use('/user',userRouter)
app.listen(3000,()=>console.log("server run at 3000..."));
router.js
路由下get請求通過req.query拿到get請求參數,是對象類型。
req.params拿不到
const express = require('express');
const router = express.Router();
//http://localhost:3000/user/getInfo?user=1
router.get('/getInfo',(req,res,next)=>{
res.send(req.query);
next();
});
module.exports = router;
效果
路由級中間件處理post請求
Express Router處理post請求時,不能通過req.query和req.params獲取參數。
post請求的參數在請求體上,但是框架對請求體做了加密處理(可通過抓包查看),可安裝body-parser插件獲取請求體中post請求數據信息
關於post請求拿不到數據的問題
如果請求體的類型不對應,就有可能出現請求正常響應但拿不到數據的問題,需要設置請求頭的Conent-Type,這里以x-www-form-urencode為例
- 如果通過接口自動化工具如postman發送post請求,需要設置請求體Body的Content-Type為x-www-form-urencode
- 如果通過node發送請求,可添加以下代碼, http.request(options,fn).setHeader("Content-Type","application/x-www-form-urlencoded")
- 如果通過js發送請求,添加以下代碼:new XMLHttpRequest().setRequestHeader("Content-Type","application/x-www-form-urlencoded")
app.js
const express = require('express');
const app = express();
const userRouter = require('./6userRouter');
const bodyParser = require('body-parser');
//extended:false 不使用第三方模塊處理參數,使用Nodejs內置模塊querystring處理
app.use(bodyParser.urlencoded({extended:false}))
//user路徑下的所有請求到派發到userRouter中處理
app.use('/user',userRouter)
app.listen(3000,()=>console.log("server run at 3000..."));
router.js
const express = require('express');
const router = express.Router();
router.post('/add',(req,res)=>{
res.send(req.body);
});
module.exports = router;
效果
一些其他的請求訪問方式
put
//put 數據的更新,消息在body體上
//建議全部更新
router.put('/r1',(req,res)=>{
console.log(req.body);//{ bbb: '222' }
res.send(req.body);
});
patch
//patch 部分更新 消息在請求體上
router.patch('/r2',(req,res)=>{
console.log(req.body);//{ bbb: '222' }
res.send(req.body);
})
delete
//delete 數據的刪除 消息在請求體上
router.delete('/r3',(req,res)=>{
console.log(req.body);//{ bbb: '222' }
res.send(req.body);
})
option
//數據的協商,測試服務端的一些功能
router.options('/r4',(req,res)=>{
res.send('r4');
});