NodeJs内置模块



一、系统模块fs–文件操作

f(file)s(system):文件操作系统

fs 文件系统 | Node.js API 文档 (nodejs.cn)

require(‘fs’)

想要使用node.js系统模块中的 fs系统模块 ,首先需要在当前模块中引入 fs

const fs = require('fs');

fs.readFile()

fs.readFile(path[, options], callback);
功能:读取指定文件中的内容

格式:

fs.reaFile('文件路径/文件名称'[,'文件编码'], callback);
fs.readFile(path[, options], callback)

参数说明:

  • path : 必选,字符串,表示文件路径
  • options: 可选,表示以什么 编码格式 来读取文件
  • callback: 必选, 文件读取完毕后, 通过回调函数callback拿到读取结果

举例:

//readFile.js
//示例:以utf-8的编码格式,读取上一级css目录下中的base.css并获取返回结果
const fs = require('fs');
fs.readFile('../css/base.css', 'utf-8', (err, dataStr) => {
    
    
		if(err == null){
    
    
			console.log("文件读取成功, 内容为: " + dataStr);
			//如果成功读取文件,返回读取文件结果
			return dataStr;
		}else {
    
    
			//文件读取失败,输出错误对象,(err.message -> 错误简要信息)
			console.log(err);
		}
	}		
)

callback 中的参数(err, doc) 说明
err

  1. 如果文件读取失败,参数err值:一个包含错误信息的对象
  2. 如果文件读取成功,参数err值:null

dataStr:是文件读取的结果


可见,node api 中的 callback 是以 错误优先 的回调函数

运行结果:

  • 读取成功
    在这里插入图片描述
  • 读取失败
    在这里插入图片描述

fs.writeFile()

fs.writeFile(file, data[, options], callback)

功能:向指定的文件中写入内容

格式:

fs.writeFile(file, data[, options], callback)

参数说明:

  • file: 必选,文件路径的字符串,表示文件的存放路径
  • data: 必选,表示要写入的内容
  • options: 可选,表示以什么格式写入文件内容,默认值为utf-8
  • callback: 必选, 文件写入完成之后的回调函数

举例:

//writeFile.js
//示例:在当前目录下的index.html文件内写入内容
const fs = require('fs');
const content = '<h3>正在使用fs.writeFile写入文件内容</h3>';
fs.writeFile('./index.html', content, err => {
    
     
//如果该目录下这个文件不存在,系统会自动创建该文件
	if(err != null){
    
    
		//文件内容写入失败
		console.log(err);
		console.log("-------------");
		console.log(err.message)
		return;
	}
	console.log('文件写入成功');
	fs.readFile('../index.html', 'utf-8', (err, dataStr) => {
    
    
        console.log(dataStr);
    })
})

callback 的参数 err 说明:

  1. 如果文件写入成功,err值:null
  2. 如果文件写入失败,err值:一个包含错误信息的对象

运行结果:
在这里插入图片描述
注意:

  1. fs.writeFile()方法只能用来创建文件(当指定文件不存在时),不能用来创建路径
  2. 重复调用fs.writeFile()写入同一个文件,新写入的内容会覆盖之前的旧内容

fs 模块 - 路径动态拼接的问题

在使用 fs 模块操作文件时,如果提供的操作路径是以 ./ 或 …/ 开头的相对路径时,很容易出现路径动态拼接错误的问题。

原因:代码在运行的时候,会以执行 node 命令时所处的目录,动态拼接出被操作文件的完整路径。

解决方案:在使用 fs 模块操作文件时,直接提供完整的路径,不要提供 ./ 或 …/ 开头的相对路径,从而防止路径动态拼接的问题。

//不要使用 ./ 或 ../ 这样的相对路径
fs.readFile('./files/1.txt', 'uft-8', function(err, dataStr){
    
    
})

// 使用完整的路径
fs.readFile(__dirname + '/files/1.txt', 'uft-8', function(err, dataStr){
    
    
})


二、系统模块path–路径操作

global.__dirname

__dirname

作用:返回当前模块的绝对路径


相对路径VS绝对路径

  • 大多数情况下使用绝对路径,因为相对路径有时候相对的是命令行工具的当前工作目录
  • 在读取文件或者设置文件路径时都会选择绝对路径
  • 使用__dirname获取当前文件所在的绝对路径
  • require()方法里可以写相对路径,是相对当前模块所在目录,而不是命令行工具的当前工作目录
/*
test.js
*/
var first = 'hello nodejs';
console.log(first);
/*
relativeOrAbsolute.js
*/
const fs = require('fs');

fs.readFile('./test.js', 'utf8', (err, doc) => {
    
    
    console.log(err)
    console.log(doc)
});

当前命令行窗口工具工作目录与文件relativeOrAbsolute.js目录不匹配,node.js运行结果:

在这里插入图片描述

使用__dirname返回被读取文件的绝对路径,改进代码

/*
relativeOrAbsolute.js
*/
const fs = require('fs');
const path = require('path');

console.log(__dirname);//获取当前模块绝对路径
console.log(path.join(__dirname, 'test.js'))//获取目标文件绝对路径

fs.readFile(path.join(__dirname, 'test.js'), 'utf8', (err, doc) => {
    
    
    console.log(err)
    console.log(doc)
});

请添加图片描述

require(‘path’)

想要使用node.js系统模块中的 path系统模块 ,首先需要在当前模块中引入 path

const path = require('path');

path.join()

路径拼接问题:不同操作系统的路径分隔符不统一

  • Windows系统 路径分隔符:\ 或者 /
  • Linux系统 路径分隔符:/



  • 实际场景:用户能在网站上上传头像,网站开发者需要指定头像文件上传到服务器的路径,而功能代码是运行在 Linus 系统上的,路径分隔符不好确定。


    path.join()能解决路径分隔符的问题,只需要指定路径名,该方法能自动匹配系统生成相应的路径分隔符

path.join([…paths])

功能:可以把多个路径片段拼接为完整的路径字符串并返回出来

格式:

path.join([...paths]);

参数说明:

  • …path<string>: 路径片段的序列
  • 返回值:<string> 拼接好的路径字符

举例:

const path = require('path');
var pathStr1 = path.join('a', 'b','c');
console.log(pathStr1);
var pathStr2 = path.join('/a','/b/c', '../','./d', 'e');
console.log(pathStr2);
var pathStr3 = path.join(__dirname, './file/1.txt')
console.log(pathStr3);

运行结果

在这里插入图片描述

path.basename()

path.basename(path[, ext])
功能:可以获取路径中的最后一部分,经常通过这个方法获取路径中的文件名。

格式

path.basename(path[, ext]);

参数说明:

  • path<string>: 必选,表示一个路径的字符串
  • ext<string>: 可选,表示文件扩展名
  • 返回:<string>, 表示路径中的最后一部分

举例

const path = require('path');
var 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.extname(path)
功能获取路径中的文件扩展名

格式

path.extname(path)

参数说明:

  • path<String>:必选,表示一个路径字符串
  • 返回值:<string> 返回得到的扩展名字字符串

举例

const path = require('path');
const fpath = '/a/b/c/index.html'; //路径字符串
const fext = path.extname(fpath);
console.log(fext); //输出 .html


猜你喜欢

转载自blog.csdn.net/weixin_45941499/article/details/120837221