Node.js学习笔记(中)

前言:

⭐本篇文章是博主自学时的笔记,如有不足希望指正,互相进步!

⭐本篇文章将有上、中、下三个部分,均记录Node.js学习的知识点。本期更新的是中部。

⭐欢迎广大博友观看,喜欢的话给个三连加关注吧!


目录

1.模块的加载机制

1.1优先从缓存中加载

1.2内置模块加载机制

1.3自定义模块加载机制

1.4第三方模块加载机制

1.5目录作为模块

2.Express

2.1初始Express

​编辑

2.2安装Express

2.2.1在终端输入命令

2.3Express的基本使用

2.3.1创建基本的web服务器

2.3.2监听GET请求

2.3.3监听POST请求

2.3.4把内容相应给客户端

2.3.5获取URL中携带的查询参数

2.3.6获取URL中的动态参数

2.4托管静态资源

2.4.1express.static()

2.4.2托管多个静态资源目录

2.4.3挂载路径前缀

2.5nodemon

2.5.1安装nodemon

2.5.2使用nodemon

2.6Express路由

 1.什么是路由

2.6.1Express中的路由

2.6.2Express中的路由的例子

2.6.3路由的概念

2.6.4模块化路由

3.Express中间件

3.1中间件的概念

3.2Express中间件调用流程

3.3Express中间件的格式

3.4next函数的作用

3.5Express中间件初体验

3.5.1定义中间件函数

3.5.2全局生效的中间件

 3.5.3中间件的作用

 3.5.4定义多个全局中间件

3.5.5局部生效的中间件

 3.5.6定义多个局部中间件

3.5.7了解中间件的5个使用注意事项

3.6中间件的分类

3.7自定义中间件

4.使用Express写接口

4.1创建基本的服务器

4.2创建API路由模块

4.3编写GET接口

4.4编写POST接口

4.5CORS跨域资源共享

4.5.1接口的跨域问题

4.5.2CORS相应头部-Access-Control-Allow-Origin

4.5.3CORS相应头部-Access-Control-Allow-Headers

4.5.4CORS相应头部-Access-Control-Allow-Methods

4.5.5CORS请求分类

4.6JSONP接口

4.6.1创建JSONP接口注意事项 

4.6.2实现JSONP接口步骤

 4.6.3实现代码 


我们接着上期记录:

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学习笔记(下)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sumpon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>