Node:HTTP请求与响应处理

请求参数:
客户端向服务器端发送请求时,有时需要携带一些客户信息,客户信息需要通过请求参数的形式传递到服务器,比如常见的登录操作。

用户在表单中输入用户名和密码之后,需要登录,用户名和密码是要通过某种形式传递给服务器端的,服务器端要获取到用户输入的这个内容,因为服务器端要去做验证,那用户名和密码如何传递给服务器端呢?就是用请求参数传递过去。

请求参数分为两种:
1. GET请求参数
2. POST请求参数

先看GET请求参数:
参数被放置在浏览器的地址栏中,例如:http://localhost:3000/?name=lisi&age=21
?后面代表的就是请求的参数,也就是需要额外携带的数据,作为服务器端想要获取这个请求参数,要通过name和age获得lisi和21两个值。
在这里插入图片描述
因为请求参数在地址栏中,因此我们可以通过req.url获取到。

// 引入系统模块http
const http = require('http');
// 创建web服务器
const app = http.createServer();
// 用request添加服务器请求事件
app.on('request',(req,res) => {
    // 获取到url
    console.log(req.url);
    // 修改内容类型为html 编码格式为urf8
    res.writeHead(200,{
        'content-type':'text/html;charset=utf8'
    })
    if(req.url == '/index' || req.url == '/'){
        res.end('Welcome to Homepage欢迎来到首页~');
    }else if(req.url == '/list'){
        res.end('Welcome to Listpage欢迎来到列表页~');
    }else {
        res.end('Not Found抱歉,没有找到相关页面');
    }
})
app.listen(3000);
console.log('网站服务器启动成功');

获取到的url信息如下:
在这里插入图片描述
但获取到信息过长,不方便做语法判断,我们需要拿到请求参数。在node.js中提供了内置模块,可以通过内置模块下的方法来处理这个请求参数,如下:。

// 内置模块url专门用来处理url地址
// 在url内置模块下有一个方法:parse()方法
// 它有两个参数,第一个参数是要解析的url
// 第二个参数是把查询参数转换成对象形式,true/false
const url = require('url');
url.parse(要解析的url,true);

解析后的url如下:
在query中存放了name和age数据,那么就可以通过对象.属性的方法获取到参数了。
在这里插入图片描述
完整操作代码示例:

// 引入系统模块http
const http = require('http');
// 引入url内置模块
const url = require('url');
// 创建web服务器
const app = http.createServer();
// 用request添加服务器请求事件
app.on('request',(req,res) => {
    // 获取到url
    console.log(req.url);
    // url下的parse方法解析url 有两个参数
    const params = url.parse(req.url,true).query;
    // 输出query对象中的name和age
    console.log(params.name);
    console.log(params.age);
})
app.listen(3000);
console.log('网站服务器启动成功');

执行后结果如下:
在这里插入图片描述
再看POST请求参数:
我们知道GET请求的请求参数是放在地址栏中传输的,而POST请求的请求参数在请求报文当中。
Form Data中存储的就是POST请求参数,点击view source,可以发现POST请求参数的格式和GET请求参数的格式是一样的,只不过GET请求参数放在了地址栏中,POST请求参数放在了请求报文中。
在这里插入图片描述
点击view source后:username=Alice&userpsd=123456在这里插入图片描述
由于POST参数没有存储在地址栏中,所以不能用req.url获取,POST参数是通过事件的方式接收的,事件分别是data和end事件,由于POST参数在理论上数据量是无限的,所以服务器为了减轻压力,POS请求参数不是一次就接收完的,比如传了100兆的数据,它不会一次性接收,可能会分为10次

当有请求参数传输的时候,会触发data事件,当请求参数传递完成时,会触发end事件。
使用querystring系统模块可以将参数转换为对象格式,querystring有一个parse方法,querystring.parse()就可以将字符串转换为对象格式了。
操作代码示例:

// 先引入系统模块http
const http = require('http');
// 用于处理字符串的第三方模块
const querystring = require('querystring');
// 创建web服务器
const app = http.createServer();
app.on('request',(req,res) => {
    // 请求参数是和请求相关的信息,所以用到req对象
    // 在req的身上绑定data和end事件
    // 因为POST参数不是一次性接收完的,所以先声明个变量用来拼接
    let postparams = '';
    req.on('data',(params) => {
        postparams += params;
    })
    req.on('end',() => {
        // querystring.parse()方法可以把字符串转换成对象格式
        console.log(querystring.parse(postparams));
        // 如果直接输出console.log(postparams); 结果是个字符串
    })
    // 对于客户端的每次请求,服务器端都要去做出响应,否则客户端将处于等待状态
    res.end('OK');
})
app.listen(3000);
console.log('网站服务器启动成功');

执行结果如下:
如果不使用querystring.parse()方法,而是直接输出,结果就是第一个红色箭头指向,是一个字符串,使用querystring.parse()方法后,结果就是第二个红色箭头指向,转换成了对象格式。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值