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');
});
posted @ 2020-03-20 13:13  IslandZzzz  阅读(12168)  评论(0编辑  收藏  举报