借助于Node.js,可以用javaScript进行后端开发。作为一个异步事件驱动的 JavaScript 运行时,Node.js 被设计用来构建可扩展的网络应用。
Node.js简介
Node.js是一个基于Chrome V8引擎的JavaScript运行环境。
Node.js官网:nodejs.org/zh-cn/
Node.js的JavaScript运行环境
注意:
- 浏览器是JavaScript的前端运行环境
- Node.js是JavaScript的后端运行环境
- Node.js中无法调用Dom和Bom等浏览器内置API
Node.js可以做什么
Node.js本身仅提供了基础的功能和API。但,基于Node.js产生了许多工具和框架:
- Express( www.expressjs.com.cn/ ),快速构建Web应用
- Electron( www.electronjs.org/ ),构建跨平台的桌面应用
- restify( restify.com/ ),快速构建API接口项目
- 读写和操作数据库、创建实用的命令行工具辅助前端开发
- 等等
Node.js安装
安装
可以直接在官网中下载安装。
- 其中,LTS为长期稳定版,Current为新特性尝鲜版。
- 安装过程中,安装位置不建议更改。
查看版本号
打开终端,输入node -V,回车。
Windows快速打开终端的方法:
- Windows徽标键+R打开面板,输入cmd打开终端。
在Node.js环境中执行js代码
- 打开终端
- 输入 node 要执行的文件路径
- 修改当前终端路径到文件所在文件夹路径,在地址栏复制文件夹路径,在终端输入cd 复制的文件夹路径
- 直接打开文件所在目录,在空白处按住Shift键右键,单击在此处打开PowerShell窗口,可直接打开终端并切换到当前目录。
cmd终端出现更早,功能更基础;PowerShell终端在cmd基础上做了升级,功能更强大。
终端中的快捷键
- ↑键,快速定位到上一次执行的命令
- tab键,快速补全路径
- esc键,快速清空当前已输入的命令
- cls命令,清空终端
内置模块
fs文件系统模块
什么是fs文件系统模块
fs模块是Node.js官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件操作的需求。
例如:
- fs.readFile()方法,用来读取指定文件中的内容
- fs.writeFile()方法,用来向指定的文件中写入内容
在js中导入fs模块:
const fs = require('fs')
读取指定文件中的内容
fs.readFile()的语法格式
//参数1,必选参数,字符串,表示文件路径
//参数2,可选参数,表示以什么编码格式读取文件,一般用utf8
//参数3,必选参数,文件读取完成后,通过回调函数拿到读取的结果
fs.readFile(path,options,callback)
fs.readFile()的示例代码
fs.readFile('./files/1.txt', 'utf8', function(err,dataStr) {
//打印失败的结果
//如果读取成功,则err的值为null
//如果读取失败,则err的值为错误对象,dataStr的值为undefined
console.log(err)
console.log('-----')
//打印成功的结果
console.log(dataStr)
})
向指定文件中写入内容
fs.writeFile()的语法格式
//参数1,必选参数,字符串,表示文件的存放路径
//参数2,必选参数,表示要写入的内容
//参数3,可选参数,表示以什么编码格式写入文件,默认utf8
//参数4,必选参数,文件写入完成后的回调函数
fs.writeFile(file,data,options,callback)
fs.writeFile()的示例代码
fs.writeFile('./files/2.txt', '写入的内容', (err) => {
//如果文件写入成功,则err值为null
//如果文件写入失败,则err值为错误对象
console.log(err)
}
注意
- fs.writeFile()方法只能用来创建文件,不能用来创建路径
- 重复调用fs.writeFile()方法写入文件,新写入的内容会覆盖之前写入的内容
路径动态拼接的问题
在使用fs模块操作文件时,如果提供的操作路径是以./或../开头的相对路径时,很容易出现路径动态拼接错误问题。
原因:代码在运行时,会以执行node命令所处的目录,动态拼接出被操作文件的完整路径。
解决:
- 使用绝对路径存放文件。(移植性非常差,不利于维护)
- __dirname+路径拼接,__dirname表示当前文件所处的目录
path路径模块
什么是path路径模块
path模块是Node.js官方提供的、用来处理路径的模块。它提供了一系列的方法和属性,用来满足用户对路径的处理需求。
例如:
- path.join(),将多个路径片段拼接成一个完整的路径字符串。
- path.basename(),从路径字符串中,将文件名解析出来。
在js中导入path模块:
const path = require('path')
路径拼接
path.join()的语法格式
//...paths <string> 路径片段的序列
//返回值:<string>
path.join([...paths])
path.join()的示例代码
//注意,../会抵消前面一层路径
const pathStr = path.join('/a', '/b/c', '../', './d', '/e')
console.log(pathStr) //输出abde
const pathStr2 = path.join(__dirname, './files/1.txt')
console.log(pathStr2) //输出 当前文件所处目录/files/1.txt
建议路径拼接使用path.join(),而不是+
获取路径中的文件名
path.basename()的语法格式
//path <string> 必选参数,表示一个路径的字符串
//ext <string> 可选参数,表示文件扩展名
//返回: <string> 表示路径中的最后一部分
path.basename(path,ext)
path.basename()的代码示例
const fpath = '/a/b/c/index.html'
const fullname = path.basename(fpath)
console.log(fullname) //输出index.html
const nameWithoutExt = path.basename(fpath, '.html')
console.log(nameWithoutExt) //输出index
获取路径中的文件扩展名
path.extname()的语法格式
//path <string> 必选参数,表示一个路径的字符串
path.extname(path)
path.extname()的代码示例
const fpath = '/a/b/c/index.html'
const fext = path.extname(fpath)
console.log(fext) //输出.html
http模块
什么是http模块
http模块是Node.js官方提供的、用来创建Web服务器的模块。通过http模块提供的http.createServer()方法,就能把一台普通的电脑变成Web服务器,对外提供Web资源服务。
在js中导入http模块:
const http = require('http')
创建最基本的web服务器
创建web服务器的步骤
- 导入http模块
- 创建web服务器实例
- 为服务器实例绑定request事件,监听客户端的请求
- 启动服务器
创建web服务器的代码示例
//1. 导入http模块
const http = require('http')
//2. 创建web服务器实例
const server = http.createServer()
//3. 为服务器实例绑定request事件,监听客户端的请求
server.on('request', (req, res) => {
console.log('soneone visit our web server.')
})
//4. 启动服务器
server.listen(8081, () => {
console.log('server running at http://127.0.0.1:8081')
})
req请求对象
req是请求对象,包含了与客户端相关的数据和属性
- req.url:客户端请求的URL地址
- req.method:客户端请求的method类型
res响应对象
res是响应对象,包含了与服务端相关的数据和属性
- res.end(): 向客户端发送指定内容,并结束这次请求的处理过程
解决中文乱码问题
res.setHeader('Content-Type','text/html; charset=utf-8')