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); //阳顶天-大九天手
});
相关推荐
垣宇4 小时前
Vite 和 Webpack 的区别和选择
前端·webpack·node.js
爱吃南瓜的北瓜4 小时前
npm install 卡在“sill idealTree buildDeps“
前端·npm·node.js
翻滚吧键盘4 小时前
npm使用了代理,但是代理软件已经关闭导致创建失败
前端·npm·node.js
浪九天5 小时前
node.js的版本管理
node.js
浪九天7 小时前
node.js的常用指令
node.js
浪九天9 小时前
Vue 不同大版本与 Node.js 版本匹配的详细参数
前端·vue.js·node.js
小纯洁w20 小时前
Webpack 的 require.context 和 Vite 的 import.meta.glob 的详细介绍和使用
前端·webpack·node.js
熬夜不洗澡1 天前
Node.js中不支持require和import两种导入模块的混用
node.js
bubusa~>_<1 天前
解决npm install 出现error,比如:ERR_SSL_CIPHER_OPERATION_FAILED
前端·npm·node.js
天下皆白_唯我独黑1 天前
npm 安装扩展遇到证书失效解决方案
前端·npm·node.js