服务器端 P44、25-42

目录

服务器端

1、基础概念

2、创建 web 服务器

3、HTTP 协议

报文

4、HTTP 请求与响应处理

请求参数

路由

静态 / 动态资源

客户端请求路径

5、Node.js 异步编程

同步、异步 API(Promise)


 

服务器端

1、基础概念

10135343

 

网站的组成

网站的应用程序主要分为:

客户端 —— 在浏览器中运行的部分,用户看到并与之交互的界面程序,使用 HTML、CSS、JS 构建;

服务器端 —— 在服务器中运行的部分,负责存储数据和处理应用逻辑,Node.js;

网站实际就是客户端和服务器基于请求和响应模型的一种应用结构。

 

Node 网站服务器

网站服务器就是能提供网站访问服务的电脑,能够接受客户端的请求,并对请求做出响应。

(以Node为运行环境)

 

IP地址(Internet Protocol Address)互联网协议地址,是网络中的唯一标识,用来查找服务器。

IP 地址对应了域名(网址);

端口用来区分服务器电脑中提供的不同服务;

 

URL(Uniform Resource Locator)统一资源定位符(网址),客户端访问服务器的请求地址,标记 Internet 网络上的资源位置;

组成:传输协议://服务器IP或域名:端口/资源所在位置标识 。

 

 

开发中的客户端 —— 浏览器,服务器端 —— Node ,是在同一台电脑上;

本机域名:localhost

本地IP:127.0.0.1

 

 

10302899

2、创建 web 服务器

利用 Node 创建软件层面上的网站服务器:

// 引用http系统模块
const http = require('http');
// 创建网站服务器对象
const app = http.createServer();

// 为服务器绑定一个request事件,当收到客户端的请求request时,触发响应response
app.on('request', (req, res) => {
    res.end('<h1>Holle</h1>');
});
// 到此 web服务器 创建完成

// 监听端口
app.listen(3000);
// 服务器启动成功

访问:在浏览器中输入 localhost:3000

 

 

3、HTTP 协议

超文本传输协议(HyperText Transfer Protocol),提供了一种发布和接收 HTML 页面的方法,客户端与服务器端之间请求和响应的标准。

 

报文

在 http 请求和响应过程中传递的数据块,包括要传递的数据和一些附加信息;

分为请求报文和响应报文,内容都是以冒号分隔的键值对的形式。

 

请求报文

请求方式:GET 获取数据、POST  发送数据标识 

GET:在浏览器中输入网址;表单的跳转行为;

POST:网站中的一般逻辑,如登录;

 

在服务器绑定的 request 事件中,可以通过 req.method 得到请求方式;

req.headers 获取请求报文,req.headers['键名'] 得到键值;

req.url 获取请求地址标识,可以根据请求地址或请求方式的不同而做不同的响应。

 

表单 <form> 标签中,

method 属性,指定表单提交的方式,默认 method="get";

action 属性,指定表单提交的地址。

 

 

响应报文

(1)HTTP 状态码:

  • 200 请求成功
  • 400 客户端请求有语法错误
  • 404 请求的资源没有找到
  • 500 服务器端错误

(2)响应内容类型

  • text/html
  • text/css
  • application/javascript
  • application/json
  • image/jpeg

 

书写响应报文,设置状态码、内容类型、编码方式:

res.writeHead(状态码, {
    'content-type': '内容类型;charset=utf8' 
})

 

 

4、HTTP 请求与响应处理

请求参数

客户端向服务器端发送请求时,以请求参数的形式携带一下客户信息,如登录时的用户名和密码。

 

用到 http、url、querystring、fs、path、   util 内置模块

 

GET 请求参数

位于网址中的 query 参数:以 ?开头,后面的参数是等号分隔的键值对的形式;

如:http://localhost:3000/?name=Tom&age=20

 

Node.js 中有内置模块 url,用于处理 url 地址;

其中,解析 url 地址的方法:

                                url.prase(地址, query是否转换成对象形式) 

将 url 解析成对象的形式,对象里面包含成员 query、pathname 等;

服务器端就可以将 GET请求参数 query 单独抽取出来进行处理。

 

 

POST 请求参数

位于请求报文中,服务器端是通过事件的方式接收 POST请求参数的;

在服务器的请求事件中,为 req参数 绑定 data、end 事件;

post 参数不是一次性都能接受的,所以接收时要将分开的参数进行拼接。

 

 

路由

是指客户端请求地址与服务器端程序代码的对应关系;

实际上是一串判断代码,判断客户端的请求方式、请求路径从而调用对应的响应程序。

 

静态 / 动态资源

静态资源是指服务器端不需要处理,可以直接响应给客户端的资源,如 CSS、JavaScript、image 文件;

动态资源是指请求地址相同时,请求参数不同,就得到不同的响应资源。

 

静态资源

在请求事件中,从获取的请求路径中得知所需资源,再读取对应的资源文件。

  1. 获取请求路径;
  2. 转化为文件实际的物理路径;
  3. 读取文件。

 

客户端请求路径

GET 方式:

  • 浏览器地址栏
  • link 标签的 href 属性
  • script、img标签的 src 属性
  • form 表单的提交 action

 

POST 方式:

  • form 表单的提交 action

 

 

 

5、Node.js 异步编程

同步、异步 API(Promise)

同步API:只有当前 API 执行完成后,才能执行下一个 API;可以通过返回值得到执行的结果;

异步 API:当前 API 的执行不会阻塞后面代码的执行;要用回调函数才可以拿到异步API 执行的结果。

 

代码的执行顺序

若代码为同步的,就放到同步代码执行区;若为异步的,就放到异步代码执行区,并将其中的回调函数放到回调函数队列;

=>  先按顺序执行同步代码  =>  然后看异步代码区中谁最先被调用,就执行对应的回调函。

 

 

Node.js 中的异步API

如 读取文件操作  fs.readFile(realPath, (err, doc) => {...});

     事件处理函数  server.on('request', (req, res) => {...});

如果想要依次执行回调函数,就要在前一个回调函数中嵌套后一个,依次嵌套,就是“嵌套地狱”的问题。

 

为了解决 Node 异步编程中回调地狱的问题:Promise

原理:使 异步代码执行 与 结果处理 分离

  1. 在原本的异步API 外面包裹一层构造函数,生成 promise 对象;
  2. 将异步API 的执行结果以参数的形式传递出去;
  3. 在外部利用 promise 实例对象接收异步API 的执行结果,并做处理。

 

ES7 新增方法:异步函数

是异步编程的终极解决方案,进一步封装 promise 的代码,将异步代码写成同步的形式,更加清晰明了;

  • 在普通函数前面加上 async 关键字,变成异步函数;
  • 异步函数内默认的返回值是 promise 对象,如果是用 return 返回,结果也会被包裹在  promise 对象中(相当于 resolve);
  • 异步函数内用 throw 关键字抛出异常程序,执行 throw 后就不再执行后面的程序;
  • await 关键字调用异步函数(必须是 promise 对象),保证异步函数按顺序执行。

 

因为 await 关键字后面必须调用的是异步函数返回的 promise 对象,所以 Node.js 的 API 方法不能直接;

Node.js 提供了一个 promisify 方法(util 模块),使 模块的API方法 返回 promise 对象,就可以使用异步函数。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值