Node.js 学习
目录
1.Node.js入门
1.1 什么是 Node.js
1.2 fs模块-读写文件
1.3 path模块-路径处理
1.4 案例-压缩前端html
1.5 认识URL中的端口号
1.6 http模块-创建Web服务
1.7 案例-浏览时钟
2.Node.js 模块化
2.1 模块化简介
2.1.1 什么是模块化?
2.1.2 CommonJS 标准导出和导入(默认)
2.2 ECMAScript标准-默认导出和导入
2.3 ECMAScript标准-命名导出和导入
2.4 包的概念
2.5 npm软件包管理器
2.6 npm安装所有依赖
2.7 npm全局软件包-nodemon
2.8 Node.js总结
1.Node.js入门
1.1 什么是 Node.js
定义:Node.js 是一个开放源代码的服务器平台,用于在服务器中执行JavaScript代码。它通常运行在服务器上而不是浏览器中。
- ✓ 编写数据接口,提供网页资源浏览功能等等
- ✓ 前端工程化:为后续学习 Vue 和 React 等框架做铺垫
Node.js 为何能执行 JS?
原理:Node.js 是建立在 Google 的 V8 JavaScript 引擎之上,这意味着它可以运行JavaScript代码而无需在浏览器中。这意味着开发者可以使用Javascript来编写服务器端代码,从而在客户端和服务器端都使用同一种语言和同一种编程范式,简化了开发和测试工作。
可以看到Node.js,没有浏览器的BOM和DOM
1.2 fs模块-读写文件
- 1. 加载 fs 模块对象
- 2. 写入文件内容
- 3. 读取文件内容
实现:
注意事项:在读取文件时,成功返回的data,这里的data是buffer 16 进制数据流对象,
但是可以通过toString()方法变成字符串。
1.3 path模块-路径处理
解决方案:
- 1. 加载 path 模块
- 2. 使用 path.join 方法,拼接路径
代码:
1.4 案例-压缩前端html
原始:
- 1. 读取源 html 文件内容
- 2. 正则替换字符串
- 3. 写入到新的 html 文件中
// 案例 - 压缩前端 html
// 需求:把 回车符(\r)和换行符(\n)去掉后,写入到新 html 文件中
// 步骤:
// 1. 读取源 html 文件内容 public/index.html
// 2. 正则替换字符串 String.replace(pattern, replacement) pattern 可以是正则
// 3. 写入到新的 html 文件中 dist/index.htmlconst fs = require('fs')
const path = require('path')fs.readFile(path.join(__dirname, 'public/index.html'), (err, data) => {if (err) console.log(err)else {// 使用正则表达式替换const disString = data.toString().replace(/[\r\n]/g, '')console.log(disString)// 将处理过的文件写到其他位置fs.writeFile(path.join(__dirname, 'dist/index.html'), disString, err => {if (err) console.log(err)else console.log('写入成功')})}
})
实现后效果:
1.5 认识URL中的端口号
平常我们没加端口号也能访问到数据,是因为 http 协议,默认访问 80 端口。
1.6 http模块-创建Web服务
- 1. 加载 http 模块,创建 Web 服务对象
- 2. 监听 request 请求事件,设置响应头和响应体
- 3. 配置端口号并启动 Web 服务
- 4. 浏览器请求 http://localhost:3000 测试
- (localhost:固定代表本机的域名)
代码:
// 需求:创建 Web 服务并响应内容给浏览器
// 步骤:
// 1. 加载 http 模块,创建 Web 服务对象
// 2. 监听 request 请求事件,设置响应头和响应体
// 3. 配置端口号并启动 Web 服务
// 4. 浏览器请求 http://localhost:3000 测试
// (localhost:固定代表本机的域名)// 加载 http 模块,创建 Web 服务对象
const http = require('http')
const server = http.createServer()
// 监听 request 请求事件,设置响应头和响应体
server.on('request', (req, res) => {// 设置text/plain;charset=utf-8 , 请求体才可以显示中文res.setHeader('Content-Type', 'text/plain;charset=utf-8')// 请求体res.end('欢迎使用node.js 和 http模块创建的 Web 服务')
})// 配置端口号并启动 Web 服务
server.listen(3000, () => {console.log('Web 启动成功')})
1.7 案例-浏览时钟
- 1. 基于 http 模块,创建 Web 服务
- 2. 使用 req.url 获取请求资源路径,判断并读取 index.html 里字符串内容返回给请求方
- 3. 其他路径,暂时返回不存在的提示
- 4. 运行 Web 服务,用浏览器发起请求测试 http://localhost:8080/index.html
代码:
/*** 目标:基于 Web 服务,开发提供网页资源的功能* 步骤:* 1. 基于 http 模块,创建 Web 服务* 2. 使用 req.url 获取请求资源路径,并读取 index.html 里字符串内容返回给请求方* 3. 其他路径,暂时返回不存在提示* 4. 运行 Web 服务,用浏览器发起请求*/// 1. 基于 http 模块,创建 Web 服务
const http = require('http')
const server = http.createServer()
const fs = require('fs')
const path = require('path')
const { error, log } = require('console')// 2. 使用 req.url 获取请求资源路径,并读取 index.html 里字符串内容返回给请求方
server.on('request', (req, res) => {// req.url得到的是资源路径if (req.url === '/index.html') {fs.readFile(path.join(__dirname, 'dist/index.html'), (error, data) => {if (error) console.log(error)else {const resource = data.toString()res.setHeader('Content-Type', 'text/html;charset=utf-8')res.end(resource)}})} else {// 3. 其他路径,暂时返回不存在提示res.setHeader('Content-Type', 'text/html;charset=utf-8')res.end('不存在提示')}
})// 4. 运行 Web 服务,用浏览器发起请求
server.listen(8080, () => {console.log('Web 服务启动成功')})
2.Node.js 模块化
2.1 模块化简介
2.1.1 什么是模块化?
定义:在Node.js中,每个文件都被视为一个单独的模块。
使用:需要标准语法导出和导入进行使用。
2.1.2 CommonJS 标准导出和导入(默认)
- 1. 导出:module.exports = {}
- 2. 导入:require('模块名或路径')
- ✓ 内置模块:直接写名字(例如:fs,path,http)
- ✓ 自定义模块:写模块文件路径(例如:./utils.js)
演示:
2.2 ECMAScript标准-默认导出和导入
- 1. 导出:export default {}
- 2. 导入:import 变量名 from '模块名或路径'
这里的变量名就是export default 里面的对象。
2.3 ECMAScript标准-命名导出和导入
- 1. 导出:export 修饰定义语句
- 2. 导入:import { 同名变量 } from '模块名或路径‘
- 按需加载,使用命名导出和导入
- 全部加载,使用默认导出和导入
2.4 包的概念
- ✓ 项目包:主要用于编写项目和业务逻辑
- ✓ 软件包:封装工具和方法进行使用
2.5 npm软件包管理器
- 1. 初始化清单文件 :npm init -y(得到 package.json 文件,有则略过此命令)
package.json
是 Node.js 项目的核心文件,它包含了项目的元数据、依赖项、脚本等重要信息。
- 2. 下载软件包 :npm i 软件包名称
- 3. 使用软件包
原理:
2.6 npm安装所有依赖
2.7 npm全局软件包-nodemon
- ➢ 本地软件包:当前项目内使用,封装属性和方法,存在于 node_modules
- ➢ 全局软件包:本机所有项目使用,封装命令和工具,存在于系统设置的位置
- 1. 安装:npm i nodemon -g(-g 代表安装到全局环境中)
- 2. 运行:nodemon 待执行的目标 js 文件
2.8 Node.js总结
- ✓ 本地软件包:作用在当前项目,一般封装的属性/方法,供项目调用编写业务需求
- ✓ 全局软件包:作用在所有项目,一般封装的命令/工具,支撑项目运行
常用命令: