03 node

1.模块的互不影响

02.js文件

exports.name="小庄";
exports.age=18;

03.js文件

let a=require("./02");
a.sex="女";
console.log(a);//{ name: '小庄', age: 18, sex: '女' }

2.关于重复引入相同的模块

05.js

module.exports={
    name:"小庄",
    age:18
}

06.js

let a=require("./05");
a.sex="woman";
console.log(a);//{ name: '小庄', age: 18, sex: 'woman' }


let b=require("./05");
console.log(b);//{ name: '小庄', age: 18, sex: 'woman' }

/*
* 在同一个文件重复引入是没有意义的,他不会重新读取05的数据。
* */

3.path模块

原生模块/npm 的引入

const path=require("path");
  • .join() 传入路径,会返回拼接好的路径
console.log(path.join("./a", "./b"));//a\b

  • 路径的拼接

    __dirname 返回当前文件夹下的绝对路径

    console.log(__dirname);
    

    如果想要在当前文件夹下去寻找其他路径,则可以使用

    console.log(path.join(__dirname,"./a"))//./a代表以当前文件夹为视角去寻找目标文件夹
    
  • .resolve() 前面会自动补上绝对路径

    console.log(path.resolve("a","b"));
    //C:\Users\Administrator\Desktop\node\03模块系统\a\b
    
    
  • .relative(); 从前者目录到达后者路径的相对路径

    console.log(path.relative("a/b/c","a/b"));//..
    
  • .parse() 分析路径

    const path=require("path");
    console.log(path.parse("C:/user/a/2.txt"));
    

    输出

    
    {
      root: 'C:/',//根
      dir: 'C:/user/a',//目录
      base: '2.txt',//基础文件
      ext: '.txt',//扩展名
      name: '2'//文件名
    }
    
    
  • path总结

    • 拼接路径用的
      • join
      • resolve
      • relative
      • parse

4.url模块

url 模块用于处理与解析 URL。 使用方法如下:

const url = require('url');
const url = require('url');
//const {URL} = require('url');
const myURL =
    new URL('https://user:pass@sub.host.com:8080/p/a/t/h?query=string#hash');
console.log(myURL);

输出

URL {
  href: 'https://user:pass@sub.host.com:8080/p/a/t/h?query=string#hash',
  origin: 'https://sub.host.com:8080',
  protocol: 'https:',
  username: 'user',
  password: 'pass',
  host: 'sub.host.com:8080',
  hostname: 'sub.host.com',
  port: '8080',
  pathname: '/p/a/t/h',
  search: '?query=string',
  searchParams: URLSearchParams { 'query' => 'string' },
  hash: '#hash'
}

5.querystring(查询字符串)

querystring 模块提供用于解析和格式化 URL 查询字符串的实用工具。 可以使用以下方式访问它:

const querystring = require('querystring');
  • querystring.parse()//将解析字符串分解成对象格式。
    
  • querystring.stringify();//把你所需的对象拼接成查询格式
    
    
    let a=querystring.stringify({name:"小庄",age:18},";",":");
    console.log(a);//name:%E5%B0%8F%E5%BA%84;age:18
    
    

6.es6补充-Set与Map

参考网站: https://es6.ruanyifeng.com/#docs/set-map

1.set结构

​ 可以去重。但是set之后的不是数组,怎么变成数组呢

let arr=["a","b","c","d","b","a"];
let s=new Set(arr);
console.log(s);//{"a", "b", "c", "d"}
console.log([...s]);//["a", "b", "c", "d"]
s.add("e");//添加数据
s.delete("a");//删除数据
console.log(s.has("a"));//true  判断是否存在某一条数据

2.Map

存储的数据可以是Key value的对应

只不过key不仅仅可以是字符串了,可以是任意的数据类型

let x={};
let map=new Map();
map.set("name","小庄");
map.set(x,18);
console.log(map.get("name"));//
console.log(map.get(x));
map.forEach(v=>{//便利MAp中的值
    console.log(v);//小庄 18

})

for(let [key,value] of map.entries()){//便利MAp中的值
    console.log(key,value);
    //name 小庄
    //{}    18

    
}

7 fs读取文件

node.js所有异步操作api都必须有回调函数,并且回调函数的第一个形参表示的是错误对象

(没有错误是null,有错误执行)

const fs =require("fs");
fs.readFile("./1.txt",(err)=>{
    if(err){
        console.log("异步出错");
    }else{
        console.log("操作成功!");
    }
})

文档流:BUFFER格式

1.readFile读取文件

三个参数:文件路径,文档格式,回调函数。

const fs =require("fs");
fs.readFile("./1.txt","utf8",(err,body)=>{
    if(err)return;
    console.log(body);//打印文件内容
})

2.writeFile修改文件

如果存在则修改,不存在则创建文件夹并书写内容

参数一:路径

参数二:内容

参数三:options 方式(“追加还是。。。”)

参数四:回调

const fs=require("fs");
fs.writeFile("index.html",
             "曹佳乐真棒",
             {
    			encoding:"utf8",
    			flag:"a",
			},
             (err)=>{
    return;
})

wirteFile不能存在一个不存在的文件夹

只能创建一个不存在的文件

8.同步api

大部分的异步api都有对应的同步api

譬如:对于读取文件

const fs =require("fs");
fs.readFile("./1.txt","utf8",(err,body)=>{
    if(err)return;
    console.log(body);//打印文件内容
})

他的同步写取方式(不需要回调函数)

const fs =require("fs");
let a=fs.readFileSync("./02.txt","utf8");
console.log(a);

当同步出错的时候怎么处理

try catch

const fs =require("fs");
let a;
try{
    a=fs.readFileSync("./022.txt","utf8");
}catch(err){
    console.log(err);
    throw err;
}
console.log(a);
console.log(2);

9.unlink

删除文件

文件不存在会报错

不能删除目录

可以删除当前文件夹

参数一:文件路径

参数二:回调函数

const fs=require("fs");
fs.unlink(
    "./index.html",
    (err)=> {
        if (err) return;
    }
)

const fs=require("fs");//同步代码
fs.unlinkSync(
    "./index.html"
)

10.rename

重命名/移动 文件或者文件夹

可以操作文件或者文件夹都可以

参数一:原路径

参数二:新路径

参数三:回调函数

重命名:

const fs=require("fs");
fs.rename("./1.txt",
			"./1.md",
			(err)=>{
				console.log(err);
			}
)

移动:

const fs=require("fs");
fs.rename("./1.md",
			"./js/index.dd",
			(err)=>{
				console.log(err);
			}
)

文件夹的重命名:

const fs=require("fs");
fs.rename("./cs",
			"./css",
			(err)=>{
				console.log(err);
			}
)

文件夹的移动:

const fs=require("fs");
fs.rename("./jss",//把这个文件夹移动到另外一个文件夹里
			"./cs/jss",
			(err)=>{
				console.log(err);
			}
)

11.文件夹操作

readdir 读取文件夹:

const fs=require("fs");
fs.readdir(
    "../03模块系统",
    (err,data)=>{
        console.log(err);
        console.log(data);
    }
)

循环输出文件夹中的字符串名称:

const fs=require("fs");
fs.readdir(
    "../03模块系统",
    (err,data)=>{
        if(err)return;
        data.forEach(item=>{
            console.log(item);
        })
    }
)

mkdir 创建文件夹

const fs=require("fs");
fs.mkdir(
    "./ds",
    (err)=>{
        console.log(err);
    }
)

rmdir 删除文件夹

只能删除空文件夹

const fs=require("fs");
fs.rmdir(
    "./ds",
    (err)=>{
        console.log(err);
    }
)

stat

fs.stat{
	"../01node.html",
	(err,stats)=>{
		if(err)return;
		console.log(stats);
	}
}

输出:

Stats {
  dev: 2197447071,
  mode: 33206,
  nlink: 1,
  uid: 0,
  gid: 0,
  rdev: 0,
  blksize: 4096,
  ino: 1688849860288726,
  size: 1909,
  blocks: 8,
  atimeMs: 1594556349273.6372,
  mtimeMs: 1594556349273.6372,
  ctimeMs: 1594558765143.9062,
  birthtimeMs: 1594481726593.8186,
  atime: 2020-07-12T12:19:09.274Z,//
  mtime: 2020-07-12T12:19:09.274Z,//
  ctime: 2020-07-12T12:59:25.144Z,//
  birthtime: 2020-07-11T15:35:26.594Z
}


const fs=require("fs");
fs.stat(
    "../01node.html",
        (err,stats)=> {
            if (err) return;
            console.log(stats);
            console.log(stats.isDirectory());//判断是否是文件夹
            console.log(stats.isFile());//判断是否是文件
        }
)

12.删除文件夹的封装

这里是一个同步方法

删除文件夹的封装.js

const fs=require("fs");
const path=require("path");
let fn=(Path)=>{
    try{
        let stat=fs.statSync(Path);//获取文件的详细信息
        if(stat.isFile()){//如果是文件
            fs.unlinkSync(Path);
        }
        if(stat.isDirectory()){//如果是文件夹
            //先读取文件夹的操作
            let dir=fs.readdirSync(Path);//为数组
            if(dir.length){//文件夹里面有内容
                dir.forEach(item=>{
                    let p=path.join(Path,item);//拼接好当前的路径
                    fn(p);//递归
                });
            }
            fs.rmdirSync(Path);

        }
    }catch (e) {
        console.log(e);
    }

};
module.exports = fn;

04.js

const rmSync=require("./删除文件夹的封装.js");
const path=require("path");
rmSync("C:\\Users\\Administrator\\Desktop\\课堂代码");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值