req.body
用req.body获取post数据,需要装body-parser中间件 ,详情参考路由中间件
所对应的url长这个样子http://localhost:3000/user/add
发送给服务器的内容为{username:'xiaoming',age:20}
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
用了这俩之后,可以使用req.body
router.post('/add', (req, res) => {
res.send({
code: 1,
message: '数据获取成功',
data: req.body //需要装第三方中间件,body-parser
})
})
req.body.username //输出xiaoming
🌰子:
路由中间件
app.js
const express = require('express');
const bodyParser = require('body-parser');
const userRouter = require('./user');
const app = express();
app.use('/static', express.static('files'))
app.use(function (req, res, next) {
console.log('application middleware ..')
next();
})
//extended: false 表示是否使用系统模块 querystring ,官方推荐
//extended: true 使用第三方qs来处理
app.use(bodyParser.json()) //创建application / json解析器
解析application / json请求体
app.use(bodyParser.urlencoded({ extended: false })) //创建application/ x-www-form- urlencoded解析器
(生成得脚手架中有 app.use(express.json());
app.use(express.urlencoded({ extended: false }));)
和这个bodyParser是他同样得作用所以就不用在装bodyParser了。
app.use('/user', userRouter)
//错误优先的原则
app.use(function (err, req, res, next) {
console.log(err.stack);
res.status(200).send('somting is wrong!')
})
app.listen(3000, () => {
console.log('localhost start 3000 ...')
})
user.js
const express = require('express');
var router = express.Router();
//针对urser下所有的路由接口
router.use(function (req, res, next) {
//获取传过来的用户信息
//let username = req.body.username;
//从数据库查询
//let rs = db.getUserinfo(uername)
// if(rs){next()}
// else {
// res.send('用户不存在')
// }
console.log('权限验证')
next();
})
//针对user下 /:id 的接口做权限验证
router.use('/:id', function (req, res, next) { //router.use
console.log('id 权限验证')
next();
})
//http://localhost:3000/user/10
// router.get("/:id", function (req, res) {
// console.log(req.params.id)
// res.send(req.params.id)
// })
router.get('/getname', function (req, res) {
// res.setHeader('Content-Type','')
console.log("get name ...")
res.json({
name: 'hanye',
age: 20
})
})
//crud: create read update delete
//数据的添加,消息体在body上
//建议全部更新
router.post('/add', function (req, res) {
//用req.body获取post数据,需要装body-parser中间件 //router.post
console.log(req.body);
res.send(req.body)
})
//获取数据,请求的参数在url地址上,在不同的浏览器上有长度的限制
//长度的限制是浏览器限制的
//http://localhost:3000/user/getinfo?username=hanye&age=20
router.get('/getinfo', function (req, res) { //router.get
//req.query 不需要装任何中间件,或者配置
console.log(req.query)
res.send(req.query)
})
//数据的更新,消息体在body 上
//建议全部更新
router.put('/r1', function (req, res) {
res.send('r1')
});
//数据的更新,消息体在body 上
//建议部分更新 {name:'zhangsan',age:20,address:"beijing"}
router.patch('/r2', function (req, res) {
res.send('r2')
})
//数据的删除,消息体在body上
router.delete('/r3', function (req, res) {
res.send('r3')
})
//数据的协商,测试服务端的一些功能
router.options('/r4', function (req, res) {
res.send('r4')
})
// head
// 类似于get请求,返回的响应中没有类容,用于获取报头
router.get('/r5', function (req, res) {
throw new Error('error message')
})
module.exports = router;
Egg.js POST 请求参数获取
// app/router.js
// ...
router.post('/add', controller.home.add);
// app/controller/home.js
// post 请求方法
async add() {
const { ctx } = this;
const { title } = ctx.request.body;
// Egg 框架内置了 bodyParser 中间件来对 POST 请求 body 解析成 object 挂载到 ctx.request.body 上
ctx.body = {
title
};
}