1. 初识Node.js
1.1 回顾与思考
掌握了哪些技术?
HTML、CSS、JavaScript
浏览器中的 JavaScript 的组成部分?
- JS核心语法:变量、数据类型、循环、分支、判断、函数、作用域、this、etc
- WebAPI:DOM操作、BOM操作、基于XMLHttpRequest 的Ajax 操作、etc
思考:为什么 JavaScript 可以在浏览器中被执行
JS代码之所以能够在浏览器中运行,是因为浏览器中它嵌入了一种JavaScript引擎(在这里我们把JavaScript引擎称为JS引擎,又称为:JavaScript虚拟机),而JS引擎它可以把JS代码解析成浏览器能够识别的代码,因此JS代码可以在含有JS引擎的浏览器中运行。
不同的浏览器使用不同的 JavaScript 解析引擎:
- Chrome 和 Opera ------V8引擎
- Firefox------OdinMonkey
- Safari-----JSCore
- IE------Chakra引擎
- Microsoft Edge------ChakraCore引擎
其中,Chrome 浏览器的 V8 解析引擎性能最好!
思考:为什么 JavaScript 可以操作 DOM 和 BOM
每个浏览器都内置了 DOM、BOM 这样的 API 函数,因此,浏览器中的 JavaScript 才可以调用它们。
浏览器的 JavaScript 运行环境
运行环境是指代码正常运行所需的必要环境。
总结:
- V8 引擎负责解析和执行 JavaScript 代码。
- 内置 API 是由运行环境提供的特殊接口,只能在所属的运行环境中被调用。
思考:JavaScript 能否做后端开发
JavaScript可以写后端。JavaScript可以通过Node.js技术来实现后端开发,Node.js是一个让JavaScript运行在服务端的开发平台。
1.2 Node.js 简介
什么是 Node.js
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
Node.js 的官网地址: https://nodejs.org/zh-cn
Node.js 中的 JavaScript 运行环境
注意:
- 浏览器 是 JavaScript 的前端运行环境。
- Node.js 是 JavaScript 的后端运行环境。
- Node.js 中无法调用 DOM 和 BOM 等浏览器内置 API 。
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…
总之:Node.js 是大前端时代的“大宝剑”,有了 Node.js 这个超级 buff 的加持,前端程序员的行业竞争力会越来越强!
1.3 Node.js 环境的安装
安装包可以从 Node.js 的官网首页(https://nodejs.org/en/)直接下载
区分 LTS 版本和 Current 版本的不同
- LTS 为长期稳定版,对于追求稳定性的企业级项目来说,推荐安装 LTS 版本的 Node.js。
- Current 为新特性尝鲜版,对热衷于尝试新特性的用户来说,推荐安装 Current 版本的 Node.js。但是,Current 版本中可能存在隐藏的 Bug 或安全性漏洞,因此不推荐在企业级项目中使用 Current 版本的 Node.js。
查看已安装的 Node.js 的版本号
打开终端,在终端输入命令 node –v 后,按下回车键,即可查看已安装的 Node.js 的版本号。
1.4 在 Node.js 环境中执行 JavaScript 代码
步骤:
- 打开终端
- 输入 node 要执行的js文件的路径
终端中的快捷键
在 Windows 的 powershell 或 cmd 终端中,我们可以通过如下快捷键,来提高终端的操作效率:
- 使用 ↑ 键,可以快速定位到上一次执行的命令
- 使用 tab 键,能够快速补全路径
- 使用 esc 键,能够快速清空当前已输入的命令
- 输入 cls 命令,可以清空终端
2. fs 文件系统模块
2.1 什么是 fs 文件系统模块
fs 模块是 Node.js 官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。
例如:
- fs.readFile() 方法,用来 读取指定文件中的内容
- fs.writeFile() 方法,用来向指定的文件中 写入内容
如果要在 JavaScript 代码中,使用 fs 模块来操作文件,则需要使用如下的方式先导入它:
const fs = require("fs")
如果出现了以下提示,不用管
var require: NodeRequire
(id: string) => any
文件是 CommonJS 模块; 它可能会转换为 ES 模块。
2.2 读取指定文件中的内容
2.2.1 fs.readFile() 的语法格式
使用 fs.readFile() 方法,可以读取指定文件中的内容,语法格式如下:
fs.readFile(path[,options],callback)
参数解读:
- 参数1:必选参数,字符串,表示文件的路径。
- 参数2:可选参数,表示以什么编码格式来读取文件。一般默认utf8
- 参数3:必选参数,文件读取完成后,通过回调函数拿到读取的结果。
2.2.2 fs.readFile() 的示例代码
文件夹框架
示例代码
以 utf8 的编码格式,读取指定文件的内容,并打印 err 和 dataStr 的值:
const fs = require("fs")
fs.readFile('./files/test.txt', 'utf8', function (err, dataStr) {
// 打印失败结果
console.log(err);
console.log('-------');
// 打印成功结果
console.log(dataStr);
})
执行test.js代码:直接定位到当前文件所处目录,在空白处,shift + 鼠标右键,点击“在此处打开PowerShell 窗口”打开终端并输入命令。
运行成功结果:
PS D:\code> node test.js
null
-------
11
PS D:\code>
- 如果读取成功,则err 的值为null
- 如果读取失败,则err 的值为错误对象,dataStr 的值为undefined
运行失败结果:
PS D:\code> node test.js
[Error: ENOENT: no such file or directory, open 'D:\code\files\test1.txt'] {
errno: -4058,
code: 'ENOENT',
syscall: 'open',
path: 'D:\\code\\files\\test1.txt'
}
-------
undefined
PS D:\code>
判断文件是否读取成功
可以判断 err 对象是否为 null,从而知晓文件读取的结果:
const fs = require('fs')
fs.readFile('./files/test.txt', 'utf8', function (err, dataStr) {
if(err){
return console.log('文件读取失败!' +err.message);
}
console.log('文件读取成功,内容是:'+ dataStr);
})
运行成功/失败结果:
PS D:\code> node test.js
文件读取失败!ENOENT: no such file or directory, open 'D:\code\files\test1.txt'
PS D:\code> node test.js
文件读取成功,内容是:11
PS D:\code>
2.3 向指定的文件中写入内容
2.3.1 fs.writeFile() 的语法格式
使用 fs.writeFile() 方法,可以向指定的文件中写入内容,语法格式如下:
fs.writeFile(file,data[,option],callback)
参数解读:
- 参数1:必选参数,需要指定一个文件路径的字符串,表示文件的存放路径。
- 参数2:必选参数,表示要写入的内容。
- 参数3:可选参数,表示以什么格式写入文件内容,默认值是 utf8。
- 参数4:必选参数,文件写入完成后的回调函数。
2.3.2 fs.writeFile() 的示例代码
示例代码
向指定的文件路径中,写入文件内容:
const fs = require('fs')
fs.writeFile('./files/test.txt', 'Hello Node.js', function (err) {
// 如果文件写入成功,则 err 的值等于一个null
// 如果文件写入失败,则 err的值等于一个错误对象
console.log(err);
})
运行成功结果:
PS D:\code> node test.js
null
PS D:\code>
注意:
- 如果运行成功,err 的值为null
- 如果文件存在并且有内容,会直接覆盖原先的内容
- 如果文件不存在会创建文件并写入内容
判断文件是否写入成功
可以判断 err 对象是否为 null,从而知晓文件写入的结果:
fs.writeFile('./files/test.txt', 'Hello Node.js', function (err) {
if(err){
return console.log('文件写入失败!'