文章目录
一、什么是Node.js
Node.js是一个基于"Chrome V8"JS解析引擎的JS运行环境。官网
1. Node.js运行环境
浏览器是JS的前端运行环境;Node.js是JS的后端运行环境。
2. Node.js可以做什么
- 基于Express框架,可以构建Web应用
- 基于Electron框架,可以构建跨平台的桌面应用
- 基于restify框架,可以构建API接口项目
- 读写和操作数据库,创建实用的命令行工具辅助前端开发,etc…
二、Node.js内置API模块
内置API是由运行环境提供的特殊接口,只能在所属运行环境中被调用。
1. fs模块:读写操作文件
// 导入fs模块
// require()方法加载模块时,会执行被加载模块中的代码
const fs = require('fs')
// 读取指定文件[path存放路径;option编码格式(一般'utf8')]
fs.readFile(path, [option], function(err, dataStr) {
// 失败的结果
console.log(err)
// 成功的内容
console.log(dataStr)
})
// 写入指定文件[path存放路径;data写入的内容;option编码格式(一般'utf8')]
fs.writeFile(path, data, [option], function (err) {
if (err) {
return console.log('文件写入失败!' + err.message)
}
console.log('文件写入成功!')
})
2. path模块:处理路径
路径path使用相对路径容易出现“路径动态拼接错误”的问题,代码会以执行node命令的目录为当前目录。提供完整路径可以解决此问题。
// 导入path模块
const path = require('path')
// 拼接路径[__dirname表示当前文件所处的目录]
path.join(path1, path2, ...)
// 获取路径中的文件名(ext可以获得去除扩展名的文件名)
const fpath = '/a/b/c/index.html'
path.basename(fpath,[ext])
// 获取路径中的扩展名
path.extname(fpath)
3. http模块:创建web服务器
1)服务器基础知识
- IP地址:互联网每台计算机的唯一地址,用点分十进制表示。通过ping命令可以查看服务器的IP地址。
- 域名:和IP地址一一对应的关系,对应关系存放在域名服务器(DNS)中。
- 域名服务器:提供IP地址和域名之间转换服务的服务器。
- 端口:标识web服务,每个web服务都对应一个唯一的端口号。客户端发送的请求通过端口号准确交给对应的web服务器进行处理。
2)http模块
// 导入http模块
const http = require('http')
// 创建web服务器实例
const server = http.createServer()
// 为服务器绑定request事件监听客户端请求
server.on('request', (req, res)=>{
// req.url 客户端请求的URL地址
// req.method 客户端请求的method类型
// res.end 向客户端响应的内容
// 设置Content-Type响应头,解决中文乱码的问题
res.setHeader('Content-Type','text/html; charset=utf-8')
})
// 启动web服务器
server.listen(80,()=>{
console.log('server running at http://127.0.0.1')
})
三、模块化与npm
1. 模块化
1)模块化概念
解决复杂问题时,自顶向下逐层把系统划分成若干模块的过程。把一个大文件拆成独立并相互依赖的多个小模块,模块是可组合、分解和更换的单元。提高了代码的复用性、可维护性,可以实现按需加载。
2)模块化规范
对代码进行模块化的拆分和组合时需要遵循的规则。降低沟通成本,极大方便了各个模块之间的相互调用。Node.js遵循CommonJS模版规范:
- 每个模版内部,model变量代表当前模块。
- module变量是一个对象,module.exports是对外的接口。
- require加载模块,加载模块的module.exports属性。
3)Node.js中模块分类
- 内置模块:Node.js官方提供的
- 自定义模块:用户自创建的js文件
- 第三方模块:由第三方开发出来的
4)模块作用域
在自定义模块中定义的变量、方法等成员,只能在当前模块内被访问。防止了全局变量污染问题,通过module对象向外共享模块作用域中的成员,外界使用require方法导入自定义模块时得到modules.exports所指向的对象。Node提供exports对象与modules.exports指向同一个对象。
2. npm
1)包
包是由第三方基于内置模块开发出来,提供更高级、方便的API,免费供所有人使用,极大的提高了开发效率。
- 可以从https://www.npmjs.com网站搜索需要的包,从https://registry.npmjs.org服务器下载需要的包。
- 包可以分为项目包和全局包。项目包安装到项目的node_modules目录下,全局包安装到用户node_modules目录下。
- 规范的包结构:
1—包必须以单独的目录存在。
2—包的顶级目录下必须包含package.json包管理配置文件,记录项目相关的配置信息。其中dependencies节点中记录安装了哪些包。
3—package.json中必须包含name包名、version版本号、main包的入口三个属性。
4—package-lock.json中记录node_modules目录下每个包的下载信息。
2)npm
npm(Node Package Manager)包管理工具可以从上述服务器把需要的包下载到本地使用。npm随着Node.js自动安装。
3)npm常用命令
// 在执行命令目录中快速创建package.json文件
npm init -y
// 安装指定包[可以指定版本:大版本.功能版本.修复版本]
npm install/i 包名@版本号
// 安装全局包
npm install/i 包名 -g
// 一次性安装dependencies节点所有依赖包
npm install/i
// 安装指定包并记录在devDependencies节点
// 【开发依赖包】只在开发阶段用到,上线阶段不会用到的记录在devDependencies节点
// 【核心依赖包】开发阶段和上线阶段都用到的记录在dependencies节点
npm install/i 包名 -D
// 卸载指定包
npm uninstall 包名
// 监听项目文件,实现自动重启项目
nodemon 文件名
// 切换镜像服务器加快下载速度【不方便】
npm config get registry
n