(一)Node.js
简介
1. Node.js
Node.js
是一个基于 Chrome V8
引擎的 JavaScript
运行环境。
Node.js
的官网地址: https://nodejs.org/zh-cn/
2. Node.js
中的 JavaScript
运行环境
3. Node.js
可以做什么
Node.js
作为一个JavaScript
的运行环境,仅仅提供了基础的功能和 API
。然而,基于Node.js
提供的这些基础能,很多强大的工具和框架如雨后春笋,层出不穷,所以学会了Node.js
,可以让前端程序员胜任更多的工作和岗位:
① 基于 Express
框架(http://www.expressjs.com.cn/),可以快速构建 Web 应用
② 基于Electron
框架(https://electronjs.org/),可以构建跨平台的桌面应用
③ 基于 restify
框架(http://restify.com/),可以快速构建 API 接口项目
④ 读写和操作数据库、创建实用的命令行工具辅助前端开发、etc…
4.Node.js
怎么学
浏览器中的JavaScript
学习路径:
JavaScript
基础语法 + 浏览器内置API
(DOM + BOM) + 第三方库(jQuery、art-template 等)
Node.js
的学习路径:
JavaScript
基础语法 + Node.js
内置 API 模块(fs、path、http等)+ 第三方API
模块(express、mysql 等)
5. Node.js
环境的安装
如果希望通过 Node.js
来运行Javascript
代码,则必须在计算机上安装Node.js
环境才行。
安装包可以从Node.js
的官网首页直接下载,进入到 Node.js
的官网首页(https://nodejs.org/en/),点击
绿色的按钮,下载所需的版本后,双击直接安装即可。
区分 LTS
版本和 Current
版本的不同:
-
①
LTS
为长期稳定版,对于追求稳定性的企业级项目来说,推荐安装LTS
版本的Node.js
。 -
②
Current
为新特性尝鲜版,对热衷于尝试新特性的用户来说,推荐安装Current
版本的Node.js
。但是,Current
版本中可能存在隐藏的 Bug 或安全性漏洞,因此不推荐在企业级项目中使用Current
版本的Node.js
。
6.查看已安装的 Node.js
的版本号
打开终端,在终端输入命令 node –v
后,按下回车键,即可查看已安装的 Node.js
的版本号。
Windows 系统快速打开终端的方式:
- 使用快捷键(
Windows徽标键 + R
)打开运行面板,输入cmd
后直接回车,即可打开终端。
- 点击
Windows
徽标键 ,然后右击,会有Windows PowerShell
和Windows PowerShell(管理员)
- 快速打开终端的方法:打开文件所处的这层目录,按
shift
键,点击右键,点击 在此处打开Powershell
窗口 git
同样也可以使用- 终端运行文件命令:
node 文件路径
7.终端
终端(英文:Terminal)是专门为开发人员设计的,用于实现人机交互的一种方式。
8. 在 Node.js
环境中执行 JavaScript
代码
① 打开终端
②输入node
要执行的js文件的路径 node 空格 文件名
终端中的快捷键:
在 Windows 的 powershell
或 cmd
终端中,我们可以通过如下快捷键,来提高终端的操作效率:
① 使用 ↑ 键,可以快速定位到上一次执行的命令
② 使用 tab 键,能够快速补全路径
③ 使用 esc 键,能够快速清空当前已输入的命令
④ 输入 cls 命令,可以清空终端(ctrl + L)
(二)fs
文件系统模块
1.fs
文件系统模块
fs
模块是 Node.js
官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。
例如:
fs.readFile()
方法,用来读取指定文件中的内容fs.writeFile()
方法,用来向指定的文件中写入内容
如果要在javaScript
代码中,使用fs
模块来操作文件,则需要使用如下的方式先导入它:
const fs = require('fs')
2.fs.readFile()
读取指定文件中的内容
2.1fs.readFile()
的语法格式
使用 fs.readFile()
方法,可以读取指定文件中的内容,语法格式如下:
fs.readFile(path[,options] , callback)
参数:
-
参数1:必选参数,字符串,表示文件的路径。
-
参数2:可选参数,表示以什么编码格式来读取文件。(默认utf8)
-
参数3:必选参数,文件读取完成后,通过回调函数拿到读取的结果。err失败的结果,dataStr成功的结果
2.2 fs.readFile()
的示例代码
以 utf8
的编码格式,读取指定文件的内容,并打印 err
和dataStr
的值:
// 1.导如fs模块
const fs = require('fs')
// 2.调用fs.readFile()方法 读取文件
// 参数1:读取文件的存放路径
// 参数2:读取文件时候采用的编码格式,一般默认指定utf8
// 参数3:回调函数,拿到读取失败和成功的结果 err dataStr
fs.readFile('./files/1.txt' , 'utf8' , function(err, dataStr){
// 2.1打印失败的结果
// 如果读取成功,则 err 的值为 null
// 如果读取失败,则 err 的值为 错误对象,dataStr的值为undefined
console.log(err);
console.log('-------');
// 2.2打印成果的结果
console.log(dataStr);
})
2.3 判断文件是否读取成功
可以判断err
对象是否为null
,从而知晓文件读取的结果:
const fs = require('fs')
fs.readFile('./files/1.txt', 'utf8', function (err, dataStr) {
if (err) {
return console.log('读取文件失败!' + err.message);
}
console.log('读取文件成功' + dataStr);
})
3. fs.writeFile()
向指定的文件中写入内容
3.1fs.writeFile()
的语法格式
使用 fs.writeFile()
方法,可以向指定的文件中写入内容,语法格式如下:
fs.writeFile(file , data[,options] , callback)
参数:
-
参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径。
-
参数2:必选参数,表示要写入的内容。
-
参数3:可选参数,表示以什么格式写入文件内容,默认值是 utf8。(可省略)
-
参数4:必选参数,文件写入完成后的回调函数。 只有一个参数 err
调用fs.writeFile()
方法,写入文件的内容,如果文件不存在则新建,如果文件存在则覆盖原有的内容
3.2 fs.writeFile()
的示例代码
向指定的文件路径中,写入文件内容:
// 1.导入 fs 文件系统模块
const fs = require('fs')
// 2.调用 fs.writeFile() 方法,写入文件的内容
fs.writeFile('./files/2.txt' , 'abcd' , function(err){
// 2.1 如果文件写入成功,则 err 的值等于 null
// 2.2 如果文件写入失败,则 err 的值等于一个 错误对象
console.log(err);
})
3.3 判断文件是否写入成功
可以判断 err
对象是否为null
,从而知晓文件写入的结果:
// 1. 导入 fs 文件系统模块
const fs = require('fs')
// 2. 调用 fs.writeFile() 方法,写入文件的内容
// 如果文件不存在则新建,如果文件存在则覆盖原有的内容
// 参数1:表示文件的存放路径
// 参数2:表示要写入的内容
// 参数3:回调函数
fs.writeFile('./files/3.txt', 'ok123', function(err) {
// 2.1 如果文件写入成功,则 err 的值等于 null
// 2.2 如果文件写入失败,则 err 的值等于一个 错误对象
// console.log(err)
if (err) {
return console.log('文件写入失败!' + err.message)
}
console.log('文件写入成功!')
})
4.fs.appendFile()
向文件追加内容的异步方法
fs.appendFile(path, data[, options], callback)
异步地追加数据到文件,如果文件尚不存在则创建文件,如果文件存在则追加
5.fs.appendFileSync()
向文件追加内容的同步方法
fs.appendFileSync(path, data[, options])
同步地将数据追加到文件,如果文件尚不存在则创建该文件
6.fs.mkdir()
创建文件夹
fsPromises.mkdir(path[, options])
path
:<string>
|<Buffer>
| <URL>
options
:<Object>
|<integer>
recursive
:<boolean>
默认值:false
mode
:<string>
|<integer>
返回:<promise>
异步地创建目录,然后在成功时解决 Promise
,且不带参数,或者带上创建的第一个目录的路径(如果 recursive
为 true
)。
可选的 options
参数可以是整数(指定 mode
(权限和粘滞位))、或对象{具有 mode
属性和 recursive
属性(指示是否要创建父目录)}。 当 path
是已存在的目录时,调用 fsPromises.mkdir()
仅在 recursive
为 false 时才导致拒绝。
7.fs.rmdir()
删除文件夹
fsPromises.rmdir(path[, options])
8.fs.unlink()
删除文件
fs.unlink(path, callback)
9.练习 - 考试成绩整理
使用fs
文件系统模块,将素材目录下成绩.txt文件中的考试数据,整理到成绩-ok.txt文件中。
整理前,成绩.txt
文件中的数据格式如下
整理完成之后,希望得到的成绩-ok.txt
文件中的数据格式如下:
核心实现步骤
① 导入需要的 fs 文件系统模块
② 使用 fs.readFile()
方法,读取素材目录下的 成绩.txt
文件
③ 判断文件是否读取失败
④ 文件读取成功后,处理成绩数据
⑤ 将处理完成的成绩数据,调用 fs.writeFile()
方法,写入到新文件 成绩-ok.txt
中
示例代码:
方法一
// 1. 导入 fs 模块
const fs = require('fs')
// 2. 调用 fs.readFile() 读取文件的内容
fs.readFile('../素材/成绩.txt', 'utf8', function(err, dataStr) {
// 3. 判断是否读取成功
if (err) {
return console.log('读取文件失败!' + err.message)
}
// console.log('读取文件成功!' + dataStr)
// 4.1 先把成绩的数据,按照空格进行分割
const arrOld = dataStr.split(' ')
// 4.2 循环分割后的数组,对每一项数据,进行字符串的替换操作
const arrNew = []
arrOld.forEach(item => {
arrNew.push(item.replace('=', ':'))
})
// 4.3 把新数组中的每一项,进行合并,得到一个新的字符串
const newStr = arrNew.join('\r\n')
// 5. 调用 fs.writeFile() 方法,把处理完毕的成绩,写入到新文件中
fs.writeFile('./files/成绩-ok.txt', newStr, function(err) {
if (err) {
return console.log('写入文件失败!' + err.message)
}
console.log('成绩写入成功!')
})
})
方法二
// 1.导入 fs 模块
const fs = require('fs')
// 2.调用 fs.readFile() 读取文件的内容
fs.