一、express模块获取post数据
1) express模块获取客户端通过 【post】发过来的数据,需要中间介 【body-parser】,首页我们下载这个中间介
cnpm i body-parser
- 新建一个客户端文件 【index.html】
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<form action="http://localhost:8080" method="post">
用户名:<input name="name" type="text" /> </br>
密码:<input name="pass" type="password" /> </br>
<input value="提交" type="submit"/> </br>
</form>
</body>
</html>
- 新建立一个本地服务器 【server.js】
const express = require('express');
// 中间介body-parser可以获取客户端通过post发过来的数据,转化成 【Object】 数据类型
const bodyParser = require('body-parser');
let server = express();
// 这 一步不能缺少,全局解析body-parser,接收两个参数,一个是 【extended: true/false】(是否拓展模式), 另一个是 【limit: 2*1024*1024】(服务器限制接收数据大小2M)))
server.use(bodyParser.urlencoded({
extended: false, // 是否拓展模式
limit: 2 * 1024 * 1024 // 服务器限制接收数据大小2M
}))
server.use(express.static('./www'))
server.use('/', (req, res) => {
console.log(req.body)
res.end()
})
server.listen(8080)
-
用命令打开服务器 【node server.js】
image.png
二、手动写一个【body-parser】中间介
1)原理:server.use((req,res,next) => {}) 表示全部接口经过,我们可以通过把这个 body 赋值给req, 当服务端通过 post 方式发送数据,通过 req.body 来获取,如下举例,把 【a=2】 赋值到全局里的接口,其他接口也能获取到这个a的值
- 建立一个本地服务器 【server3.js】
const express = require('express');
var server = express();
server.use((req, res, next) => {
req.a = 2
// next( ) 不能缺少,以便其他接口也能获取到
next()
})
server.use(express.static('./www'))
server.use('/', (req, res) => {
console.log(req.a)
res.end()
})
server.listen(8087)
-
启动服务器【node server3.js】
image.png
-
- 通过上面测试,我们发现是成立的,现在我们自己写一个 body-parser
const express = require('express');
const queryString = require('querystring');
var server = express();
server.use((req, res, next) => {
var str = '';
req.on('data', (data) => {
str += data;
})
req.on('end', () => {
req.body = queryString.parse(str);
next();
})
})
server.use('/', (req, res) => {
console.log(req.body, 'req.body')
res.end()
})
server.listen(8099);
image.png
总结:
1)获取get数据:
server.use('/',(req,res) => {
var get = req.query
})
- 获取post数据
server.use(bodyparser.urlencoded({}))
server.use('/',(req,res) => {
var post = req.body
})
- 链式操作,接口相同,同时执行了 【next()】,链式操作第一个路径参数如果没有,表示全局的。
server.get('/', (req,res,next) => {
next()
})
// 全局的next
server.post((req,res,next) => {
next()
})
server.use('/', (req,res,next) => {
next()
})
网友评论