nodejs解析请求参数
01-nodejs接收get请求参数
前端发送get请求的参数是直接在url后面拼接,格式是: url?key1=value1&key2=value2…
//1.导入模块
const http = require('http');
const url = require('url');//解析get请求参数
//2.创建服务器
let server = http.createServer((req, res) => {
//(1)将url中的中文进行转码 (编码格式:URI)
var urlStr = decodeURI(req.url);
//(2)使用字符串切割方式处理参数
/**
* @description:切割url
* @param {type} urlStr : 路径
* @param {type} boolean : 默认值false(此时query属性值是一个字符串) / true(此时query属性值是对象)
* @return: 对象。 get参数就是这个对象的 query属性
*/
var urlObj = url.parse(urlStr,true);
// 在终端中打印参数
for(var key in urlObj.query) {
console.log(key + ':' + urlObj.query[key]);
}
// 处理客户端中文乱码
res.writeHead(200, { 'Content-Type': 'text/plain;charset=utf8' });
//把接收到的参数响应给客户端
res.end(JSON.stringify(urlObj.query));
});
//3.开启服务器
server.listen(3000, () => {
console.log('success');
});
使用node命令运行上面的js文件, 打开浏览器, 地址栏输入localhost:3000?姓名=张三&性别=男, 回车后就可以在浏览器中看到node服务器返回的请求参数, 同时在终端窗口中也能看到打印的参数信息
在nodejs中, 使用url模块的parse方法来解析get请求参数, 原理其实就是字符串切割
02-nodejs接收post请求参数
get请求与post请求的一些区别
(1)位置不同 : get在url发送,post在请求体发送
(2)速度不同 : get比post速度快
(3)数据大小不同 : get发送数据有限制(1mb),post没有限制
文件上传一般是post
(4)安全性不同 : post安全性更高
登录注册一律是post
node接收解析post请求的一般步骤 :
(1) 给req注册data事件
(2) 给req注册end事件
(3) 在end事件中使用querystring模块的parse方法解析post参数
//1.导入模块
const http = require('http');
const url = require('url');//解析get请求参数
const querystring = require('querystring');//解析post请求参数
//2.创建服务器
let server = http.createServer((req, res) => {
console.log('req.url: ', req.url);
/*post请求特点
(1)在请求体发送,无法使用url来获取
(2) 当post数据比较大,无法一次性发送(次数取决于你的带宽,和数据大小)
*/
var postData = '';
//1.给req注册data事件 (浏览器每发送一个数据流,这个事件就会执行一次:多次)
req.on('data',(chunk)=>{
postData += chunk;
});
//2.给req注册end事件 (本次所有数据流发送完毕,会执行一次)
req.on('end',()=>{
//3.处理post参数 : querystring
console.log('postData: ',postData);
var body = querystring.parse(postData);
console.log('body:', body);
// 跨域设置
res.setHeader('Access-Control-Allow-Origin','*');
// 返回请求的数据给浏览器
res.end(JSON.stringify(body));
})
});
//3.开启服务器
server.listen(3000, () => {
console.log('success');
});
发送post请求
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>测试post请求</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
<script>
$(function () {
$.ajax({
url: 'http://localhost:3000',
method: 'post',
data: {
name: '张三',
age: 25,
sex: '男'
},
success: function (res) {
document.write(res);
}
})
});
</script>
</body>
</html>
node命令启动服务后, 运行上面的html文件, 结果如下:
最后总结就是:
解析get请求参数, 使用url模块, 先使用url.parse方法(传入两个参数,第一个是req.url, 第二个为true)解析url, 获取到一个对象urlObj, get请求中的具体参数通过urlObj.query获取
解析post请求参数, 使用querystring模块, 先给req注册data事件, 在data事件中,拼接请求数据, 再给req注册end事件, 在end事件中使用querystring模块的parse方法解析post参数