前言:
⭐本篇文章是博主自学时的笔记,如有不足希望指正,互相进步!
⭐本篇文章将有上、中、下三个部分,均记录Node.js学习的知识点。本期更新的是中部。
⭐欢迎广大博友观看,喜欢的话给个三连加关注吧!
目录
4.5.2CORS相应头部-Access-Control-Allow-Origin
4.5.3CORS相应头部-Access-Control-Allow-Headers
4.5.4CORS相应头部-Access-Control-Allow-Methods
我们接着上期记录:
1.模块的加载机制
1.1优先从缓存中加载
模块在第一次加载后会被缓存。也就是说,多次调用require方法并不会导致模块代码被执行多次。
1.2内置模块加载机制
内置模块的加载优先级最高。
1.3自定义模块加载机制
使用require()加载自定义模块时,必须指定以 ./ 或者../开头的路径标识符。如果没有指定这样的标识符,node会把他当作内置模块或第三方模块进行加载。
1.4第三方模块加载机制
如果传给require的模块标识符既不是一个内置模块,也没有 ./ 或者 ../开头,node.js会从当前模块的父目录开始,尝试从 /node_modules文件夹中加载第三方模块,如果没有找到,则移动到再上一层父目录中,直到文件系统的根目录。
1.5目录作为模块
2.Express
2.1初始Express
Express是基于Node.js平台的web开发框架。
Express中文网:Express - 基于 Node.js 平台的 web 应用开发框架 - Express 中文文档 | Express 中文网https://www.expressjs.com.cn/
2.2安装Express
2.2.1在终端输入命令
npm i express@4.17.2
2.3Express的基本使用
2.3.1创建基本的web服务器
const express = require('express')
const app = express()
app.listen(8080, () => {
console.log('express server running at http://127.0.0.1')
})
2.3.2监听GET请求
通过app.get()方法,可以监听客户端的GET请求:
app.get('请求的url地址', function(req, res){
})
//function表示请求对应的处理函数
//req:请求对象(包含了与请求相关的属性和方法)
//res:响应对象(包含了与相应相关的属性和方法)
2.3.3监听POST请求
app.post('请求的url地址', function(req, res){
})
//function表示请求对应的处理函数
//req:请求对象(包含了与请求相关的属性和方法)
//res:响应对象(包含了与相应相关的属性和方法)
2.3.4把内容相应给客户端
通过res.send()方法发送给客户端。
2.3.5获取URL中携带的查询参数
通过req.query对象,可以访问到客户端通过查询字符串的形式,发送到服务器的参数:
2.3.6获取URL中的动态参数
通过req.params对象,可以访问到URL中,通过" : "匹配到的动态参数:
2.4托管静态资源
2.4.1express.static()
通过这个函数,我们可以方便的创建一个静态资源服务器。
注意:Express在指定的静态目录中查找文件,并对外提供资源的访问路径,因此,存放静态文件的目录名不会出现在url中。
2.4.2托管多个静态资源目录
如果要托管多个静态资源目录,需要多次调用express.static()函数;
访问静态资源文件时,express.static()函数会根据目录的添加顺序查找所需的文件。
2.4.3挂载路径前缀
如果希望在托管的静态资源访问路径之前,挂载路径前缀,则可以使用如下的方式:
2.5nodemon
nodemon能够监听项目文件的变动,当代码被修改后,nodemon会帮我们自动重启项目。
2.5.1安装nodemon
在终端输入如下命令,即可将nodemon安装为全局可用的工具:
npm install -g nodemon
2.5.2使用nodemon
在运行js文件时,不在使用node来运行,而是使用nodemon来运行:
nodemon app.js
2.6Express路由
1.什么是路由
广义上来讲,路由就是映射关系。
2.6.1Express中的路由
在Express中,路由指的是客户端和请求与服务器处理函数之间的映射关系。
Express中的路由分三部分组成,分别是请求的类型,请求的url地址,处理函数,格式如下:
app.METHOD(PATH, HANDLER)
其中MERHOD表示请求类型,GET和POST。
PATH表示请求的url地址。
HANDLER表示处理函数。
2.6.2Express中的路由的例子
2.6.3路由的概念
1.路由的匹配过程:每当一个请求到达服务器之后,需要先经过路由的匹配,只有匹配成功之后,才会调用对应的处理函数。
在匹配时,会按照路由的顺序进行匹配,如果请求类型和请求的url同时匹配成功,则Express会将这次请求,转交给对应的function函数进行处理。
2.6.4模块化路由
为了方便对路由进行模块化管理,Express不建议将路由直接挂载到app上,而是推荐将路由抽离为单独的模块。
1.将路由抽离为单独模块的步骤:
1.创建路由模块对应的js文件。
2.调用express.Router()函数创建路由对象。
3.使用module.exports向外共享路由对象。
4.使用app.use()函数注册路由模块。
2.创建路由模块:
3.注册路由模块:
4.为路由模块添加前缀:
3.Express中间件
3.1中间件的概念
举一个生活中的例子:
3.2Express中间件调用流程
3.3Express中间件的格式
Express的中间件,本质上是一个function处理函数,格式如下:
3.4next函数的作用
在中间件1结束之后调用next函数,中间件2结束之后在调用next函数....
3.5Express中间件初体验
3.5.1定义中间件函数
3.5.2全局生效的中间件
定义全局中间件的简化形式
3.5.3中间件的作用
3.5.4定义多个全局中间件
3.5.5局部生效的中间件
不适用app.use()定义的中间件,就是局部生效的中间件。代码如下:
3.5.6定义多个局部中间件
3.5.7了解中间件的5个使用注意事项
3.6中间件的分类
1.应用级别的中间件。
2.路由级别的中间件。
3.错误级别的中间件。
4.Express内置的中间件。
5.第三方的中间件。
1.应用界别的中间件:
通过使用app.use()或app.get()或app.post(),绑定到app实例上的中间件。
注意:错误级别的中间件,必须注册在所有路由之后。
3.7自定义中间件
4.使用Express写接口
4.1创建基本的服务器
4.2创建API路由模块
4.3编写GET接口
4.4编写POST接口
4.5CORS跨域资源共享
4.5.1接口的跨域问题
注意:刚刚自定义编写的GET和POST接口,是不支持跨域请求的。
解决方法:
1.CORS(推荐)
2.JSONP(只支持GET请求)
1)使用CORS中间件解决跨域问题
2)什么是CORS
3)注意:
4.5.2CORS相应头部-Access-Control-Allow-Origin
4.5.3CORS相应头部-Access-Control-Allow-Headers
4.5.4CORS相应头部-Access-Control-Allow-Methods
4.5.5CORS请求分类
客户端在请求CORS接口时,根据请求方式和请求头的不同,可以将CORS的请求分为两大类,分别是:1)简单请求 和 2)预检请求。
1)简单请求:
2)预检请求:
3)区别:
4.6JSONP接口
浏览器端通过<script>标签的src属性,请求服务器上的数据,同时,服务器返回一个函数的调用。这种数据请求的方式叫做JSONP。
特点:
1.JSONP不属于真正的AJAX请求,因为他没有使用XMLHttpRequest这个对象。
2.JSONP仅支持GET请求。
4.6.1创建JSONP接口注意事项
4.6.2实现JSONP接口步骤
4.6.3实现代码
下期更新Node.js学习笔记(下)