node笔记
一. 初识Node.js
1.浏览器是js前端运行环境
2.Node.js是js后端运行环境
1.node可以做什么
1)基于Express框架,构建web应用
2)基于Electron框架,构建跨平台桌面应用
3)基于restify框架,构建api接口项目
4)读写和操作数据库、创建使用的命令行工具辅助开发前端,etc…
2.查看node版本号
window+r打开运行面板,输入cmd开终端
打开终端node -v
3.什么是终端
实现人际交互的方式,多记终端命令
4.node中执行js
1)打开终端
2)输入node要执行的js文件路径(前提是切换cd到目录)
如:node 1.js
cd 可以切换当前所处的目录
或者使用shift+右键在当前目录打开power shell(新版终端)
终端中的快捷键:
1.上箭头可以快速定位到上一次命令
2.使用tab可以快速补全路径,敲第一个+tab
3.使用tab可以删除当前已经输入命令
4,输入cls清空终端之前所有内容
二.fs文件系统模块
是node官方提供的、用来操作文件的模块。它提供了一系列的方法和属性,用来满足用户对文件的操作需求。
1.操作文件
需要先导入文件,fs在安装node时就内置到电脑了
1 | const fs = require('fs'); |
1)fs.readFile()方法,可以读取指定文件中的内容
1 | fs.readFile(path[,options],callback) |
参数一:必选参数,字符串,表示文件路径。
参数二:可选参数,表示以什么编码格式来读取文件。
参数三:必选参数,文件读取完成后,通过回调函数拿到读取的结果。
例子:

2.判断读取是否成功

3.向指定文件中写入内容

4.判断写入是否成功

如果没有该文件会创建一个后写入;
5.fs处理路径动态分割问题
相对路径./和.//很容易出现错误,因为node以本目录为标准动态拼接
解决方法:使用绝对路径(屁话),移植性差
使用__dirname 表示当前文件所处的目录
三.path路径模块
const path = require(’path‘);导入
1.路径拼接


使用path.join而不使用+拼接
2.获取路径中的文件名

3.获取路径中的文件扩展名

四.http模块
1.创建web服务器


2.req

3.res

4.解决中文乱码

注意:第二个参数中间是; 俩边是‘ ’
5.动态相应内容


6.将资源上传到web服务器







五.模块化
1.什么是模块化

2.加载模块

用require会直接执行用户自定义模块代码;
3.模块作用域
模块级别访问限制,模块内成员在模块外无法访问;
4.向外共享作用域成员
先了解module对象:


例子:


指向对象和挂载属性要分清
你可以使用require获取到另外一个js文件并把它赋值给某个量,那么你就可以通过这个量.来调用js文件中绑定在exports上的方法
5.模块化规范

6.npm与包
1)格式化时间
1)第一种方法:
自定义时间模块并使其暴露后被调用完成实现
2)

2)如何安装包

注意在npm官网查看api使用格式;
安装指定的包:

3)包的版本

提升规则:前面版本号增长了,后面的版本号归零
4)包管理





5)解决下包速度慢
使用淘宝镜像服务器
使用nrm小工具可以便捷切换镜像源
下载:

6)包的分类


一个实例:

7)包的组成及结构

8)开发包



9)模块化拆分

10)编写包说明文档

六.express
1.初始express
导入express、创建实例、调用方法
1.动态传参,id,实现客户端和管理端数据交互
2.express.static()托管静态资源,实现展现静态页面,访问文件,路径问题可以使用动态拼接解决
如果有多个调用,会从上到下匹配,先匹配第一个托管文件的相应内容
可以挂载路径前缀
nodemon自动重启文件,实现代码更新
2.express路由
1.客户端的请求与服务器处理函数之间的映射关系
由请求类型、URL地址、处理关系组成
2.请求到达服务器会经过路由匹配,如果请求类型和请求的URL同时匹配成功,则express会交给对应的function函数处理(按定义先后匹配)
3.最简单的用法是挂载到app上
1.模块化
方便管理
1)创建路由模块对用的.js文件
2)调用express.Router()函数创建路由对象
3)向路由对象上挂载具体路由
4)使用moudle.exports向外共享路由对象
5)使用app.use函数注册路由模块(全局中间件 )
路由注册:
1.用require导入自定义模块
2.使用app.use来注册路由模块,可以挂载前缀
3.express中间件
当一个请求到达express后,可以连续调用多个中间件,从未对这次请求进行预处理。
本质上是一个function处理函数,其形参列表篇必须包含next参数,而路由处理函数中只包含req和res
定义中间件:
函数尾部要加next(),把流转关系下传
全局生效中间件:客户端发起的任何请求,到达服务器之后,都会触发的中间件;可以通过调用app.use(中间件函数)定义;
可以定义多个,按定义先后执行
作用:多个中间件共享同一份req和res,基于这样的特性,可以在上游为req或res添加自定义的属性或方法,供下游的中间件或路由进行使用。
局部生效的中间件:不使用app.use(),可以加载路由创建时添加,只在当前路由生效,同样也可以定义多个局部,只需要依次添加即可
注意事项:
1.在路由之前注册中间件
2.next()不能忘
3.next()后不要写代码
中间件分类:
1.应用级别:绑定到app上
2.路由级别:绑定到router实例上
3.错误级别:专门捕获异常,防止崩溃,function函数形参最前面多一个形参err,要放到所有路由最后
4.内置中间件:
1)express.static
2)express.json解析json格式请求体数据
3)express.urlencoded解析UURL-encoded格式的请求体数据
5.第三方中间件:
body-parser解析表单数据,先导入,内置3)是封装的,作用相同
自定义中间件:
手动模拟一个类似express.urlencoded这样的中间件,来解析POST提交到服务器的表单数据。
1.定义中间件
2.监听req的data事件
3.监听req的end事件
4.使用querystring模块解析请求体数据
5.将解析出来的数据对象挂载为req.body
6.将自定义模块封装为模块
4.使用express写接口
5.cors跨域资源共享
cors是一个第三方中间件,可以很方便的解决跨域问题
注意:主要在服务器端进行配置;在浏览器中有兼容性
CORS响应头部:
Access-Contorl-Allow-Origin:指定允许范问该资源的外域URL
Access-Contorl-Allow-Header:扩展可发送请求头,对额外请求头进行声明
Access-Contorl-Allow-Methods:用于指明实际请求所允许使用的HTTP方法;默认情况下仅支持客户端发起get、post、head请求
简单请求:
1.get post head
2.头部信息不超过限定字段
预检请求:
在浏览器和服务器正式通信前,浏览器会先发送option请求进行预检,以获知服务器是否允许该实际请求,这次option请求称为预检请求。服务器成功响应该请求后,才会发送真正的请求,并且携带真实数据。
1.请求方式为get post head之外的请求method类型
2.请求体中包含自定义头部字段
3.向服务器发送了application/json格式的数据
6.jsonp接口
浏览器通过