Express 路由級中間件Router 處理get和post請求 獲取post請求參數問題 put patch delete等其他請求


路由級中間件

  • 創建 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');
});


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM