目录
Node初步了解
简单的说 Node.js 就是运行在服务端的 JavaScript。
作用
① 基于 Express 框架( http://www.expressjs.com.cn/ ),可以快速构建 Web 应用② 基于 Electron 框架( https://electronjs.org/ ),可以构建跨平台的桌面应用③ 基于 restify 框架( http://restify.com/ ),可以快速构建 API 接口项目④ 读写和操作数据库、创建实用的命令行工具辅助前端开发、etc…
注意
① 浏览器是 JavaScript 的前端运行环境。② Node.js 是 JavaScript 的后端运行环境。③ Node.js 中无法调用 DOM 和 BOM 等浏览器内置 API。
Node.js 文件系统
node导入文件系统模块
var fs=requier("fs");
读取文件中的内容
一.异步读取
fs.readFile(path[,options],callback);
1.path是必选参数,表示文件的路径
2.option是可选参数,表示以什么样子的编码格式来读取文件
3.callback是必选参数,表示文件读取完毕之后,通过回调函数来拿到读取的结果二.同步读取
readFileSync(path[, options]) 同步读取文件
path: 文件路径
options:可选参数 用于配置 读取文件的option
示例:
//导入fs模块
var fs = require('fs');
//异步读取
fs.readFile('文件路径', (err, data) => {
if (err) {
console.log('读取失败');
return;
}
console.log(data.toString());
})
console.log("111111");
//会先打印出111111,之后,如果读取成功,会打印出data.toString,如果失败,会打印出读取失败
//同步读取
let data = fs.readFileSync('文件路径');
console.log(data.toString());
区别:
同步:前面的代码先执行 后面的代码需要等待前面的代码执行完毕才会执行
异步:代码的执行不分先后 也就是说前面的代码执行 不会导致后面的代码阻塞 所以异步代码的执行结果的顺序是不一定的
建议使用异步方法,比起同步,异步方法性能更高,速度更快,并且没有阻塞。
对于异步,代码自上而下运行,走到地方之后,去运行io磁盘线程,效率更高,
向文件中写入内容
异步写入内容 fs.writeFile(file, data[, options], callback);
file - 文件名或文件描述符。
data - 要写入文件的数据,可以是 String(字符串) 或 Buffer(缓冲) 对象。
options - 该参数是一个对象,包含 {encoding, mode, flag}。默认编码为 utf8, 模式为 0666 , flag 为 'w'
callback - 回调函数,回调函数只包含错误信息参数(err),在写入失败时返回。
同步写入内容
fs.writeFileSync(file, data[, options], callback);
file 要写入的文件的路径 data 要写入的内容 options 配置对象(可选) encoding 编码 默认 utf8 flag 操作类型 默认 w mode 文件的权限 默认666,一般不需要传流式写入内容
其他的文件的写入方式都是一次性将一个内容写入到文件中的,
如果文件太大了则会导致运行速度过慢,会严重影响程序的性能
流式文件写入适合较大的文件写入,可以分多次将多个内容输出到文件中
追加写入fs.appendFile('文件路径','\r\n温故而知新,可以为师矣')
其中"\r\n"是换行的作用
示例 :
//导入fs模块
const fs = require('fs');
//写入文件
fs.writeFile('../../wenzi/座右铭.txt', '三人行,则必有我师焉', err => {
//写入失败:错误对象,写入成功null
if (err) {
console.log('写入失败');
return;
}
console.log('写入成功');
})
console.log(1 + 1);
//同步写入
// fs.writeFileSync('../../wenzi/座右铭.txt', '三人行,则必有我师焉);
//1.导入Fs
const fs = requier('fs');
//2.创建写入流对象
const ws = fs.createWriteStream('文件路径');
//3.write
ws.write('11111111\r\n');
ws.write('2222222\r\n');
ws.write('3333333333\r\n');
ws.write('4444444444\r\n');
//4.关闭通道
ws.close();
fs 模块 - 路径动态拼接的问题
在使用 fs 模块操作文件时,如果提供的操作路径是以 ./ 或 ../ 开头的 相对路径 时,很容易出现路径动态拼接错误的问题。原因:代码在运行的时候, 会以执行 node 命令时所处的目录 ,动态拼接出被操作文件的完整路径。解决方案:在使用 fs 模块操作文件时, 直接提供完整的路径 ,不要提供 ./ 或 ../ 开头的相对路径,从而防止路径动态拼接的问题。
Node.js中路径模块
path 模块 是 Node.js 官方提供的、用来 处理路径 的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理需求。
导入path路径模块
const path=require('path');
路径拼接
注意:今后凡是涉及到路径拼接的操作,都要使用 path.join() 方法进行处理。不要直接使用 + 进行字符串的拼接。
path.join([...paths]);
...paths <string> 路径片段的序列返回值: <string>
示例:
const pathStr=path.join('/a','/b/c','../','./d','e');
console.log(pathStr);//输出\a\b\d\e
const pathStr2=path.join(_dirname,'./files/1.txt');
console.log(pathStr2);//输出 当前文件所处的目录\files\1.txt
获取文件路径的文件名
path.basename(path[,ext]);
参数
path <string> 必选参数,表示一个路径的字符串
ext <string> 可选参数,表示文件扩展名
返回:<string> 表示路径中的最后一部分
示例
const fpath='/a/b/c/index.html';//文件存放的路径
var fullName=path.basename(fpath);
console.log(fullName); //输出index.html
var nameWithoutExt=path.basename(fpath,'html');
console.log(nameWithoutExt);//输出 index
获取路径中的文件扩展名
path.extname(path);参数path <string>必选参数,表示一个路径的字符串返回:<string> 返回得到的扩展名字符串
示例
const fpath='a/b/c/index.html';//路径字符串
const fext=path.extname(fpath);
console.log(fext);//输出 .html