HTTP 协议

curl

curl -s -v 网址

  • -s 是 silent,用于隐藏进度条
  • -v 是 verbose,用于打印全部 header
  • * 开头的是注释
  • > 开头的是 HTTP 请求
  • < 开头的是 HTTP 响应
  • -o nul 是为了隐藏 HTML 文本(LINUX 和 mac 要将 nul 改成 /dev/null)

请求

  • GET /xxx HTTP/1.1
  • HOST: baidu.com
  • User-Agent: curl/7.70.0
  • Accept: /
  • {user: “admin”}

分为四部分
一、请求行
二、请求头
三、回车
四、请求体 / 消息体

响应

HTTP/1.1 200 OK
- Content-Type: text/html
- Content-Length: 2381

  • ...

分为四部分
一、状态行
二、响应头
三、回车
四、响应体 / 消息体

HTTP 的复杂性

  • HTTP 复杂就复杂在他有很多请求头和响应头
  • 每个请求头或响应头功能各不相同

Web 框架

  • 功能
  • 更方便的处理 HTTP 的请求和响应
  • 更方便的连接数据库、Redis
  • 更方便的路由
  • 其他:HTML 模版
  • 理念
  • Web 框架的主流思想都是 MVC
  • Model 处理数据相关的逻辑
  • View 处理视图相关逻辑,前后分离之后,View 不重要
  • Controller 负责其他逻辑

express 的编程模型

app.use()

中间件

  • fn 就是中间件,因为他是被插入到启动和结束中间的物

优点

- 模块化
  • 这种模型使得每个功能都能通过一个函数实现
  • 然后通过 app.use 将这个函数整合起来
  • 如果把就函数放到文件或 npm 里,就实现了模块化

错误处理

- next(error)

  • 会直接进入 errorHandle,不执行后面的中间件

- errorHandle 的默认实现见文档

- 自定义 errorHandle

  • 文档说一般放到最后定义
  • app.use((err, req, res, next) => {})
  • 可以定义多个这样的中间件