Node.js系统模块

【图书介绍】《Node.js+MongoDB+Vue.js全栈开发实战》-CSDN博客

《Node.js+MongoDB+Vue.js全栈开发实战(Web前端技术丛书)》(邹琼俊)【摘要 书评 试读】- 京东图书 (jd.com)

2.2.1 什么是系统模块

由于Node.js运行环境提供的API都是以模块化的方式进行开发的,因此它们又被称为系统模块。

系统模块是由Node.js提供的一个个具名模块,它们都有自己的特殊名称标识,例如:

  1. fs:文件操作模块。
  2. http:网络服务构建模块。
  3. os:操作系统信息模块。
  4. path:路径处理模块。

所有核心模块都必须先手动使用require方法来加载,然后才可以使用,如图2-5所示。

图2-5

2.2.2 系统模块fs文件操作

浏览器中的JavaScript是没有文件操作能力的,但是Node.js中的JavaScript具有文件操作的能力。

在Node.js中如果想要进行文件操作,就必须引入fs这个核心模块。

fs是file-system的简写,就是文件系统的意思。在fs这个核心模块中,提供了所有与文件操作相关的API。

fs的引用方式:const fs = require('fs')。

  1. 读取文件内容

代码格式如下:

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

参数说明:

  1. 第一个参数是文件路径。
  2. 第二个参数是文件编码,方括号表示该参数是可选参数。
  3. 第三个参数是回调函数。

下面来看一个示例。新建测试文件hello-china.js,代码如下:

复制代码
var msg = '中国,你好';
console.log(msg);

新建read-file.js,代码如下:

复制代码
// 1.通过模块的名字fs对模块进行引用
const fs = require('fs');

// 2.通过模块内部的readFile读取文件内容,res 是文件读取的结果
fs.readFile('./hello-china.js', 'utf8', (err, res) => {
  // 如果文件读取出错,err则是一个包含错误信息的对象
  // 如果文件读取正确,err则是null
  console.log(err);
  console.log(res);
  console.log(res.toString());
});

文件中存储的其实都是二进制数,即0和1,但为什么这里看到的不是0和1呢?原因是二进制数转为十六进制数了。无论是二进制的0和1还是十六进制数,人们通常都不认识,我们可以通过toString方法将它们转为能认识的字符。

执行node read-file.js,结果如下:

复制代码
D:\WorkSpace\node_mongodb_vue3_book\codes\chapter2\js> node read-file.js
null
var msg = '中国,你好';
console.log(msg);
  1. 写入文件内容

代码格式如下:

fs.writeFile('文件路径/文件名称', '数据', callback);。

参数说明:

  1. 第一个参数是文件路径。
  2. 第二个参数是文件内容。
  3. 第三个参数是回调函数。

下面来看一个示例。新建文件write-file.js,代码如下:

复制代码
const fs = require('fs');

fs.writeFile('./file.txt', '阳顶天-大九天手', (err) => {
  if (err != null) {
    console.log(err);
    return;
  }
  console.log('文件内容写入成功');
});

如果文件file.txt不存在,会自动创建一个file.txt文件。

执行node write-file.js后,文件file.txt的内容如下:

复制代码
阳顶天-大九天手

我们不需要全部记住Node.js中的API模块内容,只需要知道有哪些模块,到要用的时候,可以去查API文档。以下是API在线文档地址:

  1. 官网英文版:https://nodejs.org/dist/latest-v12.x/docs/api/。
  2. 中文版:http://nodejs.cn/api/。

2.2.3 系统模块path路径操作

在编写跨平台的应用程序时,需要进行路径拼接的原因是不同操作系统中文件路径的表示方式不同。例如,在Windows操作系统中,路径通常使用反斜杠(\)作为目录分隔符,而在Linux或macOS中,路径使用正斜杠(/)作为分隔符。为了确保代码的可移植性和避免潜在的错误,在使用Node.js等编程环境时,建议使用内置的路径处理模块(如Node.js的path模块)来进行路径拼接。这样可以保证路径在不同操作系统上都能正确工作,无须手动处理这些差异。

path模块包含一系列处理和转换文件路径的工具集,通过require('path')可以访问这个模块。

路径拼接语法:path.join('路径', '路径', ...)。

下面来看一个示例。新建文件path.js,代码如下:

复制代码
// 导入path模块
const path = require('path');
// 路径拼接
const finalPath = path.join('public', 'uploads', 'avatar');
//输出结果: public/uploads/avatar
console.log(finalPath);

2.2.4 相对路径和绝对路径

大多数情况下使用绝对路径,因为相对路径相对的是node命令行工具的当前工作目录。为了尽量避免这个问题,建议将文件操作的相对路径都转为动态的绝对路径。

在读取文件或者设置文件路径时都会选择绝对路径,使用__dirname可以获取当前目录所在的绝对路径,使用__filename可以动态获取当前文件的绝对路径。

使用方式:path.join(__dirname, '文件名')。

下面来看一个示例。新建文件relative-absolute.js,代码如下:

复制代码
const fs = require('fs');
const path = require('path');
//D:\WorkSpace\node_mongodb_vue3_book\codes\chapter2\js
console.log(__dirname);
// D:\WorkSpace\node_mongodb_vue3_book\codes\chapter2\js\file.txt
console.log(path.join(__dirname, 'file.txt'));

fs.readFile(path.join(__dirname, 'file.txt'), 'utf8', (err, doc) => {
  console.log(err); //null
  console.log(doc); //阳顶天-大九天手
});
相关推荐
不爱吃鱼的猫-39 分钟前
Node.js 安装与配置全攻略:从入门到高效开发
服务器·node.js
你的人类朋友1 小时前
JS严格模式,启动!
javascript·后端·node.js
前端啊龙2 小时前
为什么需要 Node.js 的 URL 处理工具?
node.js
veminhe4 小时前
NodeJS--NPM介绍使用
node.js
还是鼠鼠14 小时前
Node.js全局生效的中间件
javascript·vscode·中间件·node.js·json·express
TimeDoor18 小时前
在 Windows上安装 Node.js 开发环境的完整指南
node.js·web开发
Summer_Xu18 小时前
模拟 Koa 中间件机制与洋葱模型
前端·设计模式·node.js
Misnearch1 天前
node.js版本管理
node.js
转转技术团队1 天前
代码变更暗藏危机?代码影响范围分析为你保驾护航
前端·javascript·node.js
Mintopia1 天前
Node.js高级实战:自定义流与Pipeline的高效数据处理 ——从字母生成器到文件管道的深度解析
前端·javascript·node.js