a随便写的nodejs学习笔记(4)

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参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值