13.node.js的GET和POST请求

node.js的GET和POST请求

在很多场景中,我们的服务器都需要跟用户的浏览器打交道,如表单提交,而表单提交到服务器一般都使用 GET/POST 请求。

获取GET请求

由于GET请求直接被嵌入在路径中,URL是完整的请求路径,包括了?后面的部分,因此我们可以手动解析后面的内容作为GET请求的参数,node.js 中 url 模块中的 parse 函数提供了这个功能。

先编写一个获取GET请求的服务器代码

const http = require('http');
const url = require('url');
const util = require('util');

//创建服务器
http.createServer(function(req, res){
    res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});
    res.end(util.inspect(url.parse(req.url, true)));
}).listen(3000);    //监听端口号为3000

然后我们使用浏览器输入
http://localhost:3000/login?Account=asdasd&password=123123

可以看到:
在这里插入图片描述
那么我们怎么获取他的参数呢?简单,看以下代码:

const http = require('http');
const url = require('url');
const util = require('util');

http.createServer(function(req, res){
    res.writeHead(200, {'Content-Type': 'text/plain'});

    // 解析 url 参数
    let params = url.parse(req.url, true).query;
    res.write("account:" + params.Account);
    res.write("\n");
    res.write("password:" + params.password);
    res.end();

}).listen(3000);

然后我们在浏览器输入:
http://localhost:3000/login?Account=asdasd&password=123456
可以看到:
在这里插入图片描述

获取POST请求

POST 请求的内容全部的都在请求体中,http.ServerRequest 并没有一个属性内容为请求体,因为等待请求体传输可能是一件耗时的工作。

比如上传文件,很多时候我们可能并不需要理会请求体的内容,恶意的POST请求会大大消耗服务器的资源,所以 node.js 默认是不会解析请求体的,当你需要的时候,必须手动获取。

基本语法结构说明:

var http = require('http');
var querystring = require('querystring');
var util = require('util');
 
http.createServer(function(req, res){
    // 定义了一个post变量,用于暂存请求体的信息
    var post = '';     
 
    // 通过req的data事件监听函数,每当接受到请求体的数据,就累加到post变量中
    req.on('data', function(chunk){    
        post += chunk;
    });
 
    // 在end事件触发后,通过querystring.parse将post解析为真正的POST请求格式,然后向客户端返回。
    req.on('end', function(){    
        post = querystring.parse(post);
        res.end(util.inspect(post));
    });
}).listen(3000);

来个代码实例吧,直接在js中写html代码和js代码,如下:

<!DOCTYPE html>
const http = require('http');
const querystring = require('querystring');

const postHTML =
    '<html><head><meta charset="utf-8"><title>post实例</title></head>' +
    '<body>' +
    '<form method="post">' +
    '<label>账号:</label>'+
    '<input name="account"><br>' +
    '<label>密码:</label>'+
    '<input name="password" type="password"><br>' +
    '<input type="submit">' +
    '</form>' +
    '</body></html>';

http.createServer(function (req, res) {
    let body = "";
    req.on('data', function (chunk) {
        body += chunk;
    });
    req.on('end', function () {
        // 解析参数
        body = querystring.parse(body);
        // 设置响应头部信息及编码
        res.writeHead(200, {'Content-Type': 'text/html; charset=utf8'});

        if(body.account && body.password) { // 输出提交的数据
            res.write("账号:" + body.account);
            res.write("<br>");
            res.write("密码:" + body.password);
        } else {  // 输出表单
            res.write(postHTML);
        }
        res.end();
    });
}).listen(3000);

显示(账号密码都输入123):
在这里插入图片描述
点击提交后,显示:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值