第三章 路由与异常
路由?是什么
作为前端程序员,只要用过 Vue 或 React,那不会没见过 route、routes、router。
一个 route 是一组对应关系,比如 /user
对应 “用户管理” 页面。
下面是一个常见的 route:
解释为:当浏览器地址栏的路径是 /user
时,渲染 User 组件。
多个 route 变成一个 route 数组,也就是 routes。
routes 里只包含 “对应关系”,并不会监听地址栏变化、再渲染 xx 组件。
这个功能由 router 承担。
可参考 Vue Router 官方文档的这段代码,注意里面的变量命名:
后端的 route 和 router 在概念、使用场景上,和前端是一样的。
handler?是什么
还有一个概念很重要 —— handler,它像前端的监听器:
- 在前端,不同的按钮,有不同的 listener
- 在后端,不同的请求,也有不同 handler(handle: 处理; handler: 处理器,处理者)
后端路由
作为前端程序员,肯定知道怎么区分请求,比如:
GET /user
可能是 “获取所有用户列表” 的请求
GET /user?id=1
可能是 “获取 id 为 1 的用户” 的请求
POST /user
可能是 “新增用户” 的请求
DELETE /user?id=1
可能是 “删除 id 为 1 的用户” 的请求
路径相同时,未必是相同的请求。
还要看 method,甚至要看看参数。
上面第 3-7 行,是 routes。
即 “xx 路径、yy method” 的请求由哪个函数来处理。
第 14-16 行,实际是起到一个 router 的作用,
正经项目中的 router 尽管比这个复杂,但原理跟这两三行代码一样。
第 18 行,从 “简易 router” 那里得到 handle 后,
执行 handle,并把 req 和 res 对象传过去。
第 24-29 行,封装了一个 “用于响应 json” 的函数。
第 31-38 行,处理 GET /user
请求。
第 40-46 行,处理 DELETE /user
请求。
404 和 500
上面的案例中,为展示最简单的路由,未考虑 “handle 不存在” 和 “handle 执行异常” 这两种情况。
404、500 这种码,前端程序员也不陌生,你一定也见过 200。
这种三位数字的码叫 http 状态码,一般地:
- 2xx 代表成功
- 4xx 代表客户端异常,比如 401,403 分别代表认证、权限问题
- 5xx 代表服务端异常
但 http 状态码并不常用,
因为它通常只用于表示通信过程的状态。
换句话说,当出现 4xx 或 5xx 时,
不是因为用户少填了字段或什么,
而是前端或后端的代码出现了 bug。
而且后端业务很复杂时,我想,500-599 这 100 个码可能不够用。
另外,http 状态码不常用还有历史原因:
互联网早期,后端响应的状态码不是 200 时,会被网络提供商拦截……
前端程序员对下面的数据结构一定不陌生:
这里面的 code 和 msg 其实是 json 数据的一部分:
code 为 0 代表正确,非 0 代表错误,这在我头一回见时,觉得很奇怪:
因为往往 0 代表 “假”、“错误”。
但我细想,成功只有一种,错误却可能千奇百怪:用户少填字段、格式不正确……
所以用 0 代表正确,用非 0 们代表各种各样的异常。
或者,你把 code 当成 “错误码” 也行:那么 0 就是 “没有错误”。