nodejs入门之get和post请求

Node.js GET/POST请求

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

一.GET请求

由于GET请求直接被嵌入在路径中,URL是完整的请求路径,包括了?后面的部分,因此你可以手动解析后面的内容作为GET请求的参数。也就是说get请求的的参数,是跟随在URL后面的,浏览器的地址栏上的url就是get请求

解析参数:node.js 中 url 模块中的 parse 函数提供了这个功能。

//index.js

//引入http内置模块
const http=require("http");
const url=require('url');

//req 请求信息   res返回信息
const server=http.createServer((req,res)=>{
    //设置状态码和响应头
    res.writeHead(200, {
        "Content-Type": "text/plain;charset=utf-8"
    });
    //排除掉 favicon.ico的处理
   if (req.url === '/favicon.ico') {
     return;
   }
   

     /**
     * 解析 url 参数
     *  parse将字符串转成对象,req.url="/?name=zhangsan&age=18",
     *  true表示params是{name:"zhangsan",age:"18"},
     *  false表示params是name=zhangsan&age=18
     */
    var params = url.parse(req.url, true).query; 
    
    //响应数据
    res.write(`我的姓名是:${params.name},我的年龄是${params.age}`);
    //结束响应
    res.end();
});

server.listen(3000, function () {
    console.log("服务启动成功");
});

在终端中定位到当前项目所在路径 ,然后命令 node index.js 服务启动成功,直接浏览器运行

http://localhost:3000?name=zhangsan&age=18 即可看到get请求输出的结果

在这里插入图片描述

POST请求

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

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

//处理post请求

//引入http内置模块
var http = require("http");
//解析参数的内置模块
var querystring=require("querystring");

//创建web服务  req 请求信息   res返回信息
http.createServer((req, res) => {

    //设置状态码和响应头
    res.writeHead(200, {
        "Content-Type": "text/html;charset=utf-8"
    });


    /**
     * 监听事件
     *    eventName     要监听的事件的名字 (eventName 不是自己想的名字)
     *    callback      监听的这个事件被触发时要执行的回调函数
     * 
     * req.on(eventName, callback)
     * 
     * $('#btn').on('click', function(event) {
     *    // 这个回调的代码在用户真的去点击了这个 #btn 的按钮时才会触发
     * })
     */

    //定义了一个raw变量,用于暂存请求体的信息
    let raw = "";

    // 通过req的data事件监听函数,每当接受到请求体的数据,就累加到raw变量中
    req.on("data", function (chunk) {
        raw += chunk;
    });

    /**
     * 监听 req 的 end 事件
     * 
     * 这个end事件的回调函数是当整个请求体传输完成之后再触发的
    */

    // 在end事件触发后,通过querystring.parse将post解析为真正的POST请求格式,然后向客户端返回。
    req.on("end", function () {
        //解决传输过来的参数中文乱码
        raw = decodeURI(decodeURI(raw));

        //解析参数raw
        raw = querystring.parse(raw);

        res.write(`我的名字是:${raw.username},年龄:${raw.age}`);
        res.end();
    });

}).listen(3000, () => {
    console.log("启动服务");
});

在这里插入图片描述

发布了17 篇原创文章 · 获赞 40 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/liuqiao0327/article/details/105086003