6.15打卡 Node.js

Node.js

快捷键

在window的powershell或者cmd终端中

  • 使用 ↑ 可以快速定位到上一次执行的命令
  • 使用tab 能够快速补全路径
  • 使用esc 能够快速清空当前已输入的命令
  • 输入cls 命令 可以清空终端

fs文件系统模块

1.fs模块是node官方提供的、用来操作文件的模块 它提供了一系列的方法和属性 用来满足用户需求

例如:

  • fs.readFile()方法 用来读文件内容
  • fs.readFile()方法,用来写文件内容

如何导入?

const fs = require('fs')

__dirname 表示当前文件所处的目录

path路径模块

它是用来处理路径的模块 它提供了一系列的方法和属性 用来满足用户对路径的处理需求

  • path.join() 用来将多个路径片段拼接成一个完整的路径字符串
  • path.basename()方法 用来从路径字符串中 将文件名解析出来

还是先导入

const path = require('path')

http模块

客户端和服务器的概念

在网络节点中 负责消费资源的电脑叫做 客户端

负责对外提供网络资源的电脑叫做服务器

http模块是用来创建web服务器的模块 通过http模块提供的http.createServer()方法 就能创建一台web服务器 从而对外提供web资源服务

http模块的作用

在node.js中 我们不需要第三方web服务器软件 因为我们可以基于node.js提供的http模块 通过几行简单的代码 就能轻松的手写一个服务器软件 从来对外提供web服务

服务器相关概念

IP地址

ip地址就是互联网上每台计算机的唯一地址 只有在知道对方ip地址的前提下 才能与对应的电脑之间进行数据通信

ip地址的格式:通常用"点分十进制"表示成(a.b.c.d)的形式 其中abcd表示0-255之间的数字

注意:

  • 互联网上每台web服务器,都有自己的ip地址
  • 开发期间 自己的电脑即是一台服务器 也是一个客户端 为了方便测试 可以在自己浏览器上输入127.0.0.1 就能把自己的电脑当作一台服务器进行访问了

域名和域名服务器

域名是ip地址的别名 方便人们记忆

ip地址和域名是一一对应的关系 这种对应关系被存放到一种叫做域名服务器的电脑中

访问域名时 DNS将域名转换为ip地址 在进行访问

开发期间 127.0.0.1对应的域名是localhost 都代表了本机

端口号

每台电脑对应一个id 但是每台电脑可以产生多个web服务 所以一个端口号对应一个web服务

通过端口号 可以准确的交给对应的web服务进行处理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RRe4qrzX-1655303053957)(C:\Users\命与超然\AppData\Roaming\Typora\typora-user-images\image-20220606135626784.png)]

注意:

  • 每个端口号不能同时被多个web服务占用
  • 在实际应用中 URL中的80端口可以被忽略

创建web服务器的基本步骤

  1. 导入http模块
  2. 创建web服务器实例
  3. 为服务器实例绑定request事件 监听客户端的请求
  4. 启动服务器

req

只要服务器接收到来自客户端的请求 就会调用server.on()为服务器绑定的request事件处理函数

如果想在事件处理函数中 访问和客户端相关的数据和属性 可以使用req

模块化

分为内置模块(fs.path.http) 自定义模块(js文件) 第三方模块 需要手动安装

调用require时 会自动执行模块中的代码

加载模块就是调用require

module对象

每个自定义模块中都有一个module对象 它里面存储了和当前模块有关的信息

module.exports对象

在自定义模块中可以使用module.exports对象来 将模块中的成员共享出去 供外界使用

外界用require()方法导入自定义模块时 得到的就是module.exports 所指向的对象

共享对象时的注意点

使用require()方法导入模块时 导入的结果 永远以module.exports指向的对象为准

exports === module.exports

两者使用误区

时刻谨记,require()模块时 得到的永远都是module.exports指向的对象

模块化规范

Node遵循了CommonJS模块化规范 CommonJS规定了模块的特性和各模块之间如何相互依赖

CommonJS规定:

  • 每个模块内部 module变量代表当前模块
  • module变量是一个对象 它的exports属性(即module.exports)是对外的接口
  • 加载某个模块 其实是加载该模块的module.exports 属性 require()用来加载模块

.

Express

Express是基于node平台 快速、开放、极简的web开发框架

通俗的说 Express的作用和node.js内置的http模块类似 是专门用来创建web服务器的

Express的本质 就是一个npm的第三方包 提供了快速创建web服务器的便捷方法

Express能做什么?

对于前端程序员来说 最常见的两种服务器 分别是

  • web网站服务器 专门对外提供web网页资源的服务器
  • api接口服务器 专门对外提供api接口的服务器

使用Express 我们可以方便、快速的创建web网站服务器或者API接口的服务器

express.static()

express 提供了一个非常好用的函数 叫做express.static(),通过它 我们可以非常方便地创建一个静态资源服务器 例如 通过如下代码就可以将public目录下的图片 css文件

JS文件对外开放访问了

app.use(express.static('public'))

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w4S7pce8-1655303053958)(C:\Users\命与超然\AppData\Roaming\Typora\typora-user-images\image-20220607135803253.png)]

注意:Express 在指定的静态目录中查找文件 并对外提供资源的访问路径

因此 存放静态文件的目录名不会出现在URL中

如果要托管多个静态资源目录 多次调用express.static()

访问静态资源文件时 express.static()函数会根据目录的添加顺序查找所需的文件

挂在路径前缀

如果希望在托管的静态资源访问路径之前 挂在路径前缀 则可以使用如下的方式

app.use('puublic(可以任意添加)',express.static('public'))

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TLlSb3UL-1655303053958)(C:\Users\命与超然\AppData\Roaming\Typora\typora-user-images\image-20220607143522880.png)]

Express路由

在Express中 路由指的是客户端的请求与服务器处理函数之间的映射关系

Express中的路由分三部分组成 分别为请求的类型、请求的url地址、处理函数 格式如下

app.method(path,handler)


// 匹配GET请求 且请求url为 /
app.get('/',function(req,res){
    res.send('Hello World!')
})

// 匹配POST请求 且请求url为 /
app.post('/',function(req,res){
    res.send('Got a POST request!')
})

路由匹配过程

每当一个请求到达服务器后 需要先经过路由的匹配 只有匹配成功之后 才会调用对应的处理函数

路由匹配注意点:

  • 按照定义的先后顺序进行匹配 在前面匹配的优先级高
  • 请求类型和请求的url同时匹配成功 才会调用对应的处理函数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c1zSPxDH-1655303053959)(C:\Users\命与超然\AppData\Roaming\Typora\typora-user-images\image-20220607150626470.png)]

中间件

中间件 特指业务流程的中间处理环节

Express 中间件的调用流程

当一个请求到达Express的服务器之后 可以连续调用多个中间件 从而对这次请求进行预处理

Express中间件的格式

Express的中间件 本质上就是一个function处理函数 Express中间件的格式如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-afRUE27L-1655303053960)(C:\Users\命与超然\AppData\Roaming\Typora\typora-user-images\image-20220607160408629.png)]

next函数的作用

next函数是实现多个中间件连续调用的关键 它表示把流转关系转交给下一个中间件或路由

中间件的作用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FyIL4FeQ-1655303053962)(C:\Users\命与超然\AppData\Roaming\Typora\typora-user-images\image-20220607203559896.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8PvJTopl-1655303053963)(C:\Users\命与超然\AppData\Roaming\Typora\typora-user-images\image-20220607204229492.png)]

局部生效的中间件

不适用app.use()定义的中间件 叫做局部生效的中间件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O1KKuedE-1655303053964)(C:\Users\命与超然\AppData\Roaming\Typora\typora-user-images\image-20220607210033929.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zhGEOzn7-1655303053965)(C:\Users\命与超然\AppData\Roaming\Typora\typora-user-images\image-20220607210220478.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b5jOsVMj-1655303053965)(C:\Users\命与超然\AppData\Roaming\Typora\typora-user-images\image-20220608092106901.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S7qZ9bXP-1655303053966)(C:\Users\命与超然\AppData\Roaming\Typora\typora-user-images\image-20220608094323176.png)]

CORS跨域资源共享

1.接口的跨域问题

解决接口跨域问题的方案主要有两种:

  • CORS(主流的解决方案:推荐使用)
  • JSONP(有缺陷的解决方案:只支持GET请求)

使用cors中间件解决跨域问题

cors是express的一个第三方中间件 通过安装和配置cors 可以很方便的解决跨域问题

使用步骤:

  1. 运行npm install cors 安装中间件
  2. 使用const cors = require(‘cors’) 导入中间件
  3. 在路由之前调用app.use(cors()) 配置中间件

什么是CORS?

CORS(跨域资源共享) 由一系列HTTP响应头组成 这些HTTP响应头决定浏览器是否组织前端JS代码跨域获取资源

浏览器的同源安全策略默认会组织网页“跨域”获取资源 但如果接口服务器配置了CORS相关的HTTP响应头 就可以解除浏览器端的跨域访问限制

CORS的注意事项

  1. CORS主要在服务器端进行配置 客户端浏览器无需做任何额外的配置 即可请求开启了cors的接口
  2. cors在库伊喀巴曲中有兼容性 只有支持XHR level2 的浏览器 才能正常访问开启了CORS的服务端接口

数据库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CJki1JbU-1655303053967)(C:\Users\命与超然\AppData\Roaming\Typora\typora-user-images\image-20220608212944060.png)]
使用const cors = require(‘cors’) 导入中间件
3. 在路由之前调用app.use(cors()) 配置中间件

什么是CORS?

CORS(跨域资源共享) 由一系列HTTP响应头组成 这些HTTP响应头决定浏览器是否组织前端JS代码跨域获取资源

浏览器的同源安全策略默认会组织网页“跨域”获取资源 但如果接口服务器配置了CORS相关的HTTP响应头 就可以解除浏览器端的跨域访问限制

CORS的注意事项

  1. CORS主要在服务器端进行配置 客户端浏览器无需做任何额外的配置 即可请求开启了cors的接口
  2. cors在库伊喀巴曲中有兼容性 只有支持XHR level2 的浏览器 才能正常访问开启了CORS的服务端接口

数据库

[外链图片转存中…(img-CJki1JbU-1655303053967)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

左丘超然

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

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

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

打赏作者

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

抵扣说明:

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

余额充值