系统模块
什么是系统模块?
Node运行环境提供的API,因为这些API都是以模块化的方式进行开发的,所以我们又称Node运行环境提供的API为系统模块。
系统模块fs 文件操作
f:file文件,s:system系统,文件操作系统
使用一个模块要先引入那个模块,要使用文件操作相关的模块需要在使用之前先引入它。
//引入fs模块,require方法比较特殊,这个方法的相对路径相对的就是当前文件。 const fs = require('fs');
读取文件内容
读取文件内容的API - readFile方法 就是fs 对象下面的一个方法。
读取文件内容的API - readFile方法的应用场景:当客户端访问服务端的时候,请求index.html 时,服务器需要先在它的硬盘当中找到这个文件并读取出文件的内容,再将其文件的内容返回给客户端。
读取文件内容的API - readFile方法的语法:
//readFile方法有三个参数,第一个参数是要读取的文件的路径,这个方法的相对路径相对的是命令行工具的当前工作目录 //(带文件名称的文件路径); 第二个参数是要读取文件的文件编码, //外面包着一个中括号说明这个参数是一个可选参数; //第三个参数callback代表一个回调函数, 用来获取文件读取的结果。 //因为硬盘读取文件需要时间,当读取文件内容完成之后, //硬盘会通知这个API文件读取完成,可以调用回调函数了。 //在调用回调函数的过程中把文件读取的结果通过函数的参数的方式传递。 fs.readFile('文件路径/文件名称'[,'文件编码'],callback)
读取文件语法实例:
//通过模块的名字fs对模块进行引用 const fs = require('fs'); //通过模块内部的readFile()方法读取文件内容
//回调函数的第一个参数是err,若读取发生错误,则错误信息会存储在这里面。
//不仅仅是readFile()API,Node.js中的所有的API的回调函数第一个参数都是err,
/所以又称node.js的回调函数为错误优先的回调函数。
fs.readFile('./b.js','utf8',(err,doc)=>{ //如果文件读取出错 err是一个对象 包含错误信息 //如果文件读取正确,err是null //doc是文件读取的结果 console.log(err); //null console.log(doc); });
写入文件内容
//语法
//write有三个参数,第一个参数是想要写入的文件的路径(也是一个带文件路径、带文件名称的参数),
//第二个参数是要写入的内容,类型为string,
//第三个参数为回调函数,因为写入操作也是耗时的操作,所以不能通过API的返回值来获取API执行的结果,需要通过回调函数的方式获取。
fs.writeFile('文件路径/文件名称','数据',callback);
写入文件内容的API - writeFile方法 的应用场景:在网站运行的过程中要监控网站的运行情况, 例如在网站运行过程中是否有报错的情况,但是程序员不可能一直盯着电脑屏幕,所以我们希望当程序运行报错时,能够将错误写入到错误日志当中,也就是说写入到一个文件当中。当程序员上班时只需要查看错误日志就可以知道程序是否报过错了。
写入文件语法实例:
const fs = require('fs'); //若目录中没有test.txt这个文件,那么API会自动创建这个文件 fs.writeFile('./test.txt','即将要写入的内容',err=>{ if(err!=null){ conslole.log(err); return; } console.log('文件内容写入成功!'); })
系统模块path 路径操作
- 路径拼接
为什么要进行路径拼接?
不同系统的路径分隔符不统一
Windows上是: / \
Linux上是:/
因为Linux系统通常被用做网站的服务器,在Windows系统上所写的代码是有可能运行在Linux系统上的。
路径拼接的应用场景:比如网站中的头像上传功能,用户上传的头像文件实际上是要存储在服务器硬盘中的某一个文件夹中的,在程序文件当中要想找到这个文件夹就必须要拼接这个文件夹的路径,在这种情况下就需要使用系统模块path,它会在内部判断你所使用的操作系统,然后使用系统对应的路径操作符进行路径拼接,这样我们写出的代码才会比较通用。
路径拼接的API语法:
//语法 path.join('路径','路径',···)
路径拼接代码示例:
//导入path模块 const path = require('path'); //路径拼接,path.join不属于耗时操作, //所以可以通过返回值来接收拼接的结果。 const finialPath = path.join('public','uploads','avatar'; //输出结果 itcast\a\b\c.css console.log(finialPath);
在使用路径时使用相对路径还是绝对路径?
相对路径 vs 绝对路径
在使用Node开发的时候,大多数情况下使用绝对路径,除非相对路径相对的是文件本身,但是大多数情况下,相对路径相对的是命令行工具的当前工作目录
在读取文件或设置文件路径时都会选择绝对路径
使用__dirname获取当前文件所在的绝对路径
const fs = require('fs'); const path = require('path'); fs.readFile(path.join(__dirname,'a.js'),'utf-8',(err.doc)=>{ console.log(err); console.log(doc); })