node 模块、系统模块、自定义模块、三方模块(笔记)

1. path模块(路径)

  • path模块导入

    const path = require('path'); // 系统模块
    
  • path.basename():获取路径最后一部分。第二个参数表示扩展文件名,指定后,获取的是不包含扩展文件名的部分。

    const name = path.basename('/Users/LEO/Desktop/Code/node/02.js');
    console.log(name); // 02.js
    
    const name = path.basename('/Users/LEO/Desktop/Code/node/02.js''.js');
    console.log(name); // 02
    
  • path.dirname():返回一个路径的目录名。

    const name = path.dirname('/Users/LEO/Desktop/Code/node/02.js');
    console.log(name); // /Users/LEO/Desktop/Code/node
    
  • path.extname():返回路径的扩展名,即从路径的最后一部分中的最后一个 .(句号)字符到字符串结束。 如果路径的最后一部分没有 . 或路径的文件名的第一个字符是 .,则返回一个空字符串

    const name = path.extname('/Users/LEO/Desktop/Code/node/02.js');
    console.log(name); // .js
    
  • path.parse():返回一个对象,对象的属性表示路径的元素

    const name = path.parse('/Users/LEO/Desktop/Code/node/02.js');
    console.log(name);
    /*
     { root: '/', // 文件的根路径
       dir: '/Users/LEO/Desktop/Code/node', // 文件的全路径
       base: '02.js', // 文件全名称
       ext: '.js', // 扩展名
       name: '02'  // 文件名
     }
    */
    
  • path.format(obj):从一个对象返回一个路径字符串.

    const obj = {
      root:'/'dir:'/Users/LEO/Desktop'base:'1.txt'
    }
    console.log(path.format(obj)); // /Users/LEO/Desktop/1.txt
    
    - `path.isAbsolute()`:判断一个路径是否为绝对路径
    
    console.log(path.isAbsolute('/Users/LEO/Desktop/1.txt')); // true
    
    console.log(path.isAbsolute('Users/LEO/Desktop/1.txt')); // false
    
  • path.join():将给定符合规范的字符串拼接成完整路径。

    console.log(path.join('/a''/b''c''d')); // /a/b/c/d
    console.log(path.join('/a''/b''c''d''../')); // /a/b/c/
    
  • path.normalize():规范化路径

    console.log(path.normalize('/foo/bar//baz/asdf/quux/..')); // /foo/bar/baz/asdf
    
  • path.relative(from,to):返回从 from 到 to 的相对路径(基于当前工作目录)

    console.log(path.relative('/Users/LEO/Desktop/Code/node/src/''/Users/LEO/Desktop/Code/node/01.js')); // ../01.js
    
  • path.resolve():把一个路径或路径片段的序列解析为一个绝对路径.

    console.log(path.resolve('/foo/bar''./baz'));
    // 返回: '/foo/bar/baz'
    
    console.log(path.resolve('/foo/bar''/tmp/file/'));
    // 返回: '/tmp/file' 因为'/tmp/file已经是一个绝对路径 所以不再拼接
    
    console.log(path.resolve('wwwroot''static_files/png/''../gif/image.gif'));
    // /Users/LEO/Desktop/Code/node/wwwroot/static_files/gif/image.gif
    // 拼接到wwwroot 还不是绝对路径 所以会把当前工作目录拼接成绝对路径
    
  • path.sep:路径分隔符.Windows 上是 \,Unix\Linux 上是 /

    console.log(path.sep); // /
    
  • path.delimiter:环境变量分隔符. Windows 上是 ;,Unix\Linux上是 :

    console.log(path.delimiter); // :
    

2. fs模块(文件系统)

  • 对文件进行增删改查操作,每一个操作方法都有同步(sync)和异步(async),默认不加sync的都是异步

  • 异步都是使用的回调,同步都是返回需要接收

    // fs模块导入
    const fs = require('fs'); // 系统模块
    
2.1 文件操作
2.1.1 文件读取
  • fs.stat():查看文件状态

    fs.stat('./01.js' (err, stats) => {
      if (err) {
        console.log(err);
        return;
      }
      console.log(stats);
    })
    
    // stats两个常用两个方法
    fs.stat('./01.js' (err, stats) => {
      if (err) {
        console.log(err);
        return;
      }
      // 读取的文件
      if (stats.isFile()) {
        console.log('文件');
      // 读取的目录
      } else if (stats.isDirectory()) {
        console.log('目录');
      }
    })
    
    // stats常用属性
    // atime: 文件访问时间
    // ctime: 文件状态信息发生变化的时间
    // mtime: 文件数据内容发生变化的时间
    // birthtime: 文件创建的时间
    
  • fs.statSync():查看文件状态(同步)

    console.log(1);
    const res = fs.statSync('./01.js');
    console.log(res);
    console.log(2);
    
  • fs.readFile(path[, encoding], callback):异步地读取一个文件的全部内容.path为文件路径,可选参数options为编码格式,callback异步回调。

    // 没有指定编码 输出为buffer
    fs.readFile(__dirname + '/01.js' (err, data) => {
      if (err) throw err;
      console.log(data.toString());
    });
    
    // 指定输出编码,不写默认读取的是 buffer
    fs.readFile(__dirname + '/01.js''utf8' (err, data) => {
       if (err) throw err;
       console.log(data);
    });        
    
  • fs.readFileSync(path[, encoding], callback):同步读取文件内容。

    const file = fs.readFileSync(__dirname + '/01.js''utf8');
    console.log(file);            
    
2.1.2 文件写入
  • fs.writeFile(file, data[, encoding], callback):异步地写入数据到文件,如果文件已经存在,则替代文件,如果没有文件会创建一个文件。data 可以是一个字符串或一个 buffer。encoding 默认为 ‘utf-8’。

    fs.writeFile(__dirname + '/03.js''Hello Node.js' (err) => {
      if (err) throw err;
      console.log('写入成功!');
    });
    
  • fs.writeFileSync(file, data[, encoding]):同步地写入数据到文件。

    fs.writeFile(__dirname + '/03.js''Hello Node.js');
    
  • fs.appendFile(path, data[, options], callback):异步地将数据追加到文件,如果该文件尚不存在,则创建该文件。data 可以是字符串或 <Buffer>

2.1.3 文件流操作
  • fs.createWriteStream(path):创建一个文件可写流.

  • fs.createReadStream(path)::创建一个文件可读流.

    // 创建一个文件读取流
    let readStream = fs.createReadStream(path.join(__dirname, '../../node/day01/04-view/01-初识nodejs.avi'));
    // 创建一个文件写入流
    let writeStream = fs.createWriteStream(path.join(__dirname, '../../''01.avi'));
    
    // 第一种: 基于事件的文件流读写
    // 开始读取文件
    readStream.on('data' (chunk) => {
      // 开始写入文件
      writeStream.write(chunk);
    })
    
    // 文件写入完毕
    readStream.on('end' () => {
      console.log('写入完毕')
    })
    
    // 第二种: 通过管道连接写入
    readStream.pipe(writeStream);
    
2.2 目录操作
2.2.1 创建目录
  • fs.mkdir(path, callback):异步创建目录

    fs.mkdir(path.join(__dirname,'test')(err)=>{
      console.log(err);
    })
    
  • fs.mkdirSync(path):同步创建目录

    fs.mkdirSync(path.join(__dirname,'hello'))
    
2.2.2 读取目录
  • fs.readdir(path,callback):异步读取目录

    fs.readdir(__dirname, (err, files) => {
      files.forEach((item, index) => {
        fs.stat(path.join(__dirname, item) (err, stats) => {
          if (stats.isFile()) {
            console.log(item + '文件')
          } else if (stats.isDirectory()) {
            console.log(item + '目录')
          }
        })
      })
    })
    
  • fs.readdirSync(path):同步读取目录

    var files = fs.readdirSync(__dirname);
    console.log(files);
    
2.2.3 删除目录
  • fs.rmdir(path,callback):异步删除指定目录

    fs.rmdir(path.join(__dirname,'test')(err)=>{
      console.log(err);
    })
    
  • fs.rmdirSync(path):同步删除指定目录

    fs.rmdirSync(path.join(__dirname,'test')) 
    

3. http模块(超文本传输协议)

3.1 开启服务
// 导入http系统模块
const http = require("http")

// 创建服务
let server = http.createServer()

// 监听请求
server.on("request", (request, response) => {
  // 写入响应内容
  response.write("你好")
  // 响应完后需要结束,不然会一直加载
  response.end("") // 这里面也可以写入
})

// 监听端口
server.listen(9527, () => {
  console.log("服务已开启: http://127.0.0.1:9527")
})
3.2 url解码与编码
// 进行编码
encodeURI("url地址")

// 进行解码
decodeURI("url地址")
3.3 get和post请求参数
// get请求通过url截取

// post请求通过 ==>
request.on("data", (url) => {
  console.log(url)
  })
3.4 页面重定向
// 只能3开头
response.writeHead(302, {
   // 重定向的地址
  "Location": "http://127.0.0.1:9527/user.html"
})
// 重定向也需要结束当前页面
response.end()

还有很多模块!!

4. 自定义模块

  • 在node中又分为全局作用域和模块作用域
4.1 global(全局作用域)
  • 在node中没有window,但是有一个global全局作用域

  • 在global上面挂载属性,即使没有导出当前属性也可以使用

    // demo1.js文件中
    global.num = 10
    console.log(global.num); // 10
    
    // demo2.js文件中,可以不用导出num,但是这两个文件必须建立联系,这个num就是全局变量
    require("./demo1.js")
    console.log(global.num); // 10
    
4.2 模块作用域
  • require(导入)

    // commonJS 的导入导出
    require("文件路径") // 自定义模块
    require("fs/path") // 系统模块
    
  • exports(导出)

    // 没被导出的属性,导入的对象接收不到
    // demo1.js文件
    let num = 10
    let str = "20"
    let obj = {}
    
    // 这种方法只能单个导出,但是导入的时候还是一个对象
    exports.num = num
    exports.str = str
    
    // demo2.js文件
    console.log(require("./demo1.js")) // { num: 10, str: '20' }
    
  • module.exports(模块导出)

    // demo1.js文件
    let num = 10
    let str = "20"
    let obj = {}
    
    // 这种方法可以导出一个对象
    module.exports = {
      num,
      str,
      obj
    }
    
    // demo2.js文件
    console.log(require("./demo1.js")) // { num: 10, str: '20', obj: {} }
    

5. 第三方包(模块)

// 需要使用npm安装这个包
const $ = require("jquery")
5.1 包的查找规则
// 会在当前目录下node_modules中查找,如果没有会在上层目录查找
// 一直到最上层,还没有找到就会报错
require("三方包")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值