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');
});
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性