Http+fs+events+url+path 模块篇

HTTP模块

  • http模块, 我们可以通过该模块,维护一个服务器

  • 步骤

    1. 引入模块

      const http = require("http");
      
    2. 创建服务对象, 并设置监听的回调函数

      const server = http.createServer(function (req, res) {
          // 该函数会在前端请求本服务器时触发, req 请求对象, 存储本次请求的所有数据; res 响应对象, 用于对本次请求做响应
          console.log("服务器被请求了...");
          res.end("request finished!");
      });
      
    3. 设置端口号, 开启监听 端口号的范围0-65535, 建议起4位的端口号

      server.listen(6789, function () {
          // 该函数会在服务器启动之后触发
          console.log("服务器搭建完毕, listening......");
      });
      

FS模块

  • 专门处理文件的模块

  • 步骤

    1. 引入fs模块

      const fs = require("fs");
      
    2. 引入path模块

      const path = require("path");
      

      注:node建议, 我们在使用fs读取文件的时候, 文件的路径给绝对路径

    3. 拼接一个当前文件的绝对路径出来

      let bookPath = path.resolve(__dirname, "book.txt");
      
    4. 异步读取文件内容

      fs.readFile(bookPath, "utf-8", function (error, data) {
          console.log(data, error);
      });
      
    5. 同步读取文件内容

      let data = fs.readFileSync(bookPath, "utf-8");
      console.log(data);
      

events模块

  • 用来做事件监听的模块

    因为将来, 我们有一些需求, 不确定什么时候会发生, 结果自然不知道什么时候能得到, 处了可以通过回调解决之外, 监听也是一种办法

  • 事件监听的注意点:

    ​ 一定要保证先设置监听, 再触发事件

  • 步骤

    1. 引入events模块

      const EventEmitter = require("events");
      
    2. 创建事件监听对象

      const event = new EventEmitter();
      
    3. 设置监听 通过on方法

      //on("要监听的事件名", 回调);
      event.on("ChinaEvent", function () {
          // 该函数当 ChinaEvent事件触发时调用
          console.log("ChinaEvent事件触发了!");
      });
      
    4. 触发事件 通过emit方法

       // emit("事件名");
      event.emit("ChinaEvent");
      setTimeout(function(){
          event.emit("ChinaEvent");
      }, 3000);
      
      

URL模块

  • node里用来处理网络地址的模块

  • 步骤

    1. 引入url模块

      const url = require("url");
      
      let urlPath = "http://www.test.com:9876/a/b/c/index.html?username=张三&password=666#second";
      
    2. 通过url模块将url地址解析成对象方便我们获取里的值

      let urlPathObj = url.parse(urlPath);
      console.log(urlPathObj);
      
    3. /*
        protocol: 协议名
        slashes: 协议名后面是否有双斜杠
        auth: 网址是否经过认证授权
        host: 域名:端口号
        port: 端口号
        hostname: 域名
        hash:哈希值
        search:?参数列表
        query: 参数列表
        pathname: 路径
        path: 路径?参数列表
        href: 完整的url路径
       */
      

Path模块

  • node里用来处理路径的模块

  • 步骤

    1. 引入path模块

      let path = require("path");
      
    2. 规范化路径

      let str1 = "./a/b/c/../d";
      let pathStr1 = path.normalize(str1);
      
    3. 路径拼接 在拼接的同时, 做规范化

      let pathStr2 = path.join("/", "/a", "/b", "../", "/c");
      
    4. node的两个全局变量 __ dirname 表示当前文件所属的文件夹的绝对路径, __filename当前文件所属的绝对路径

      console.log(__dirname);
      console.log(__filename);
      
    5. 判断一个路径是否是绝对路径

      console.log(path.isAbsolute(__filename));
      console.log(path.isAbsolute(__dirname));
      //以/开头的也认为是绝对路径
      console.log(path.isAbsolute("a/b/c/d"));
      console.log(path.isAbsolute("./a/b/c/d"));
      console.log(path.isAbsolute("/a/b/c/d"));
      
    6. 指定路径的开头 resolve(指定的开头, 子路径)

      a. 当第一个参数省略时, 系统会默认把指定的开头认为是当前文件所在目录

      b. 如果第二个参数是绝对路径, 系统就不再拼接, 而做替换

      let pathStr3 = path.resolve(__dirname, "a/b/c");
      let pathStr4 = path.resolve(__dirname, "/a/b/c");
      let pathStr5 = path.resolve("a/b/c");
      let pathStr6 = path.resolve("/a/b/c");
      
    7. 自动计算从一个路径到另一个路径的相对路径

      let pathStr7 = path.relative("/a/b/c", "/a/f");
      
    8. 获取当前路径里的文件所处的位置

      let pathStr8 = path.dirname("/a/b/c/d/book.txt");
      
    9. 获取路径中的最后一个部分 basename()

      let str2 = "C:\\Users\\lx\\Desktop\\中北大学2017级大前端实训课堂代码\\Node\\Node01\\1.txt"
      // console.log(str2);
      let pathStr9 = path.basename(str2);
      // console.log(pathStr9);
      
    10. 获取路径里面文件的后缀 extname()

      let str3 = "/a/b/c/d/news.doc";
      let pathStr10 = path.extname(str3);
      
    11. 对路径进行解析, 解析成一个路径对象

      let str4 = path.resolve(__dirname, "aaa.ppt");
      console.log(str4);
      let pathObj = path.parse(str4);
      console.log(pathObj);
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值