美文网首页Web
Node.js的学习总结http(四)

Node.js的学习总结http(四)

作者: 追逐_chase | 来源:发表于2019-12-18 08:52 被阅读0次
    node.jpeg

    http模块

    • 可以通过 Nodejs提供的http模块,我们可以快速的构建一个web服务器,
    • 需要手动引入这个模块
    • 通过HTTP模块实现服务器功能步骤
      • 1.导入HTTP模块
      • 2.创建服务器实例对象
      • 3.绑定请求事件
      • 4.监听指定端口请求
    let http = require("http");
    //2.创建服务器对象
    let  server = http.createServer();
    //3.注册监听事件
    server.on("request",function (req, res) {
    
        // writeHead方法的作用: 告诉浏览器返回的数据是什么类型的, 返回的数据需要用什么字符集来解析
        res.writeHead(200, {
            "Content-Type": "text/plain; charset=utf-8"
        });
    
        //end方法的作用是: 结束本次请求并且返回数据
        res.end("www.ezcarry.com,哈哈哈");
    
        
    });
    
    //4.监听端口
    server.listen(3000);
    

    只要本地的 web服务对应的端口是3000就监听到

    http模块中的路由(路径分发)

    • 路径分发也称之为路由, 就是根据不同的请求路径返回不同的数据
    • 通过请求监听方法中的request对象, 可以获取到当前请求的路径,根据不同的请求路径返回不同的数据
      • request的本质是http.IncomingMessage类的实例,req.url
      • response对象其实是http.ServerResponse 类的实例,
    //1.导入模块
    let http = require("http");
    //2.创建服务器对象
    let  server = http.createServer();
    //3.注册监听事件
    /*
    request的本质是http.IncomingMessage类的实例
    response对象其实是http.ServerResponse 类的实例
     */
    
    server.on("request",function (req, res) {
    
        console.log(req.url);
        // writeHead方法的作用: 告诉浏览器返回的数据是什么类型的, 返回的数据需要用什么字符集来解析
        res.writeHead(200, {
            "Content-Type": "text/plain; charset=utf-8"
        });
        
        // startsWith 方法检测 字符串是否 包含 子串
        if (req.url.startsWith("/index")){
            //end方法的作用是: 结束本次请求并且返回数据
            //注意点:end方法来返回数据,那么只会返回一次
            // res.end("www.ezcarry.com,首页");
    
            //通过write方法 返回数据, 不会结束本次请求,必须要收到结束请求
            res.write("首页1111");
            res.end();
        }else if (req.url.startsWith("/login")) {
            res.end("登陆测试");
        }else {
            res.end("没有数据---");
        }
    
    
    
    
    });
    
    //4.监听端口
    server.listen(3000);
    
    
    

    http模块加载静态资源

    • 在加载图片的资源是不能写utf8,不能的资源类型时对应不同的相应头
    • 如果服务器在响应数据的时候没有指定响应头, 那么在有的浏览器上, 响应的数据有可能无法显示
    image.png
    
    
    let http = require("http");
    let fs = require("fs");
    let path = require("path");
    
    //加载js,json出来的都是 js的实例对象
    let mine = require("./mime");
    
    //创建服务器对象
    let server = http.createServer();
    
    //监听相应请求
    server.on("request",function (req,res) {
     //拼接文件路径
        let filePath = path.join(__dirname,"www",req.url);
        /*
           注意点:
           1.加载其它的资源不能写utf8
           2.如果服务器在响应数据的时候没有指定响应头, 那么在有的浏览器上, 响应的数据有可能无法显示
       * */
        let extname = path.extname(filePath);
    
        //判断有没有加载文件资源
        if (extname === ""){
            res.end("server error");
    
            return;
        }
    
        let type =  mine[extname];
    
        console.log(type);
    
        if (type.startsWith("text")){
            type += "; charset=utf-8;";
        }
    
    
        //设置相应头
        res.writeHead(200,{
            "Content-Type": type
        });
        
        //读取文件
        fs.readFile(filePath,function (err,data) {
            if (err){
                res.end("server error");
            }
            res.end(data);
        })
     
    });
    
    
    server.listen(3000);
    
    
    image.png

    需要注意的是: 代码是 mine是一个文件 里面存放是json对象,对应了 不同格式的资源 对应的 不同的相应头的名称,比如: ".html": "text/html",,".jpg": "image/jpeg",

    image.png

    URL模块

    • 需要收到导入
    
    // 80是端口
    //#banner 是哈希值
    let urlStr = "http://root:123456@www.ezcarry.com:80/index.html?name=TT&age=68#banner";
    
    //url转化为对象
    //参数二; query转化为对象
    let obj = url.parse(urlStr,true);
    
    console.log(obj);
    console.log(obj.query.name);
    
    
    image.png
    post请求的参数处理
    
    /*
    
    1.如何拿到POST请求传递过来的参数
    使用querystring模块
    
    querystring.parse(str[, sep[, eq[, options]]])  将参数转换为对象
    querystring.stringify(obj[, sep[, eq[, options]]]) 将对象转换为参数
    
     */
    
    //导入模块
    
    let http = require("http");
    
    //这个模块用于 解析和格式化 URL 查询字符串的实用工具
    let querystring = require('querystring');
    
    let server = http.createServer();
    
    server.on("request",function (req,res) {
        //1.定义变量保存传递过来的参数
        let params = "";
        //注意点:在node.js中,post请求的参数我们不能一次性拿到,必须分批获取
        //开始获取参数
        req.on("data",function (el) {
    
            params += el;
        });
    
        //结束
        req.on("end",function () {
    
            console.log(params);
    
            //解析url字符串
            let obj = querystring.parse(params);
            console.log(obj);
        });
    
        res.end("提交成功");
    
    
        
    });
    
    
    server.listen(3000);
    
    

    相关文章

      网友评论

        本文标题:Node.js的学习总结http(四)

        本文链接:https://www.haomeiwen.com/subject/xmjdnctx.html