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); //阳顶天-大九天手
});
相关推荐
MaisieKim_19 小时前
python与nodejs哪个性能高
前端·python·node.js
水煮白菜王20 小时前
深入理解 Webpack 核心机制与编译流程
前端·webpack·node.js
程序员拂雨20 小时前
Express知识框架
node.js·express
大G哥21 小时前
项目中利用webpack的require.context实现批量引入/导入图片
前端·webpack·node.js
七冬与小糖2 天前
【本地搭建npm私服】使用Verdaccio
前端·npm·node.js
巴巴_羊2 天前
webpack和vite区别
前端·webpack·node.js
亦世凡华、2 天前
前端npm包发布流程:从准备到上线的完整指南
前端·经验分享·npm·node.js·npm发包
X01动力装甲2 天前
Node.js 24.0 正式发布:性能跃升与开发体验全面升级
node.js
q567315232 天前
Node.js数据抓取技术实战示例
爬虫·python·scrapy·node.js
巴巴_羊2 天前
yarn npm pnpm
前端·npm·node.js