Express 路由级中间件Router 处理get和post请求 获取post请求参数问题

路由级中间件

  • 创建 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请求的参数在请求体上,然而因为框架对请求体做了加密处理(可通过抓包工具如fiddler查看),因此可安装body-parser插件获取请求体中的post请求数据信息

关于post请求拿不到数据的问题

如果请求体的类型不对应,就有可能出现请求正常响应但拿不到数据的问题,以下是解决方式

  • 如果通过接口自动化工具如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 不适用第三方模块处理参数,使用系统内置模块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;
效果

猜你喜欢

转载自www.cnblogs.com/ltfxy/p/12531066.html