您的当前位置:首页正文

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

来源:图艺博知识网
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方法的作用是: 结束本次请求并且返回数据
    

    
});

//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方法来返回数据,那么只会返回一次
        // 

        //通过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 = 
    /*
       注意点:
       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 = 

//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);

Top