express 初探
文章目录
express 初探起始REST APInodemonexpress 中间件中间件的错误处理 express 常用中间件express.static()express.urlencoded()express.json() express 路由小结起始
npm i express // 安装
// 方式 1 -- 配合 http 模块使用const express = require(express);const http = require(http);const app = express(); // 创建一个 express 应用// app 实际是一个函数,用于处理请求的函数const server = http.createServer(app);const port = 9999;server.listen(port, () => console.log(`server listening on ${port}...`));// 方式 2const express = require(express);const app = express(); // 内部使用了 http 模块const port = 9999;app.listen(port, () => console.log(`server listening on ${port}...`));
配置
// 根据不同的配置,交给不同的处理函数进行处理const express = require(express);const app = express();// 配置一个请求映射,如果请求方法和请求路径均满足匹配,就交给对应的处理函数进行处理// app.请求方法("请求路径", 处理函数);app.get(./news/:id, (req, resp) => {// req 和 resp 是经过 express 封装过后的请求 / 响应对象console.log(req.headers); // 获取请求头console.log(req.path); // 获取请路径console.log(req.query); // 获取查询值,并封装成对象console.log(req.params); // 获取动态路径值 如请求路径是 ./news/9527 => { id: 9527 }// 响应resp.send(); // 响应结果,内部会调用 end/*** send 里是字符串 -> 自动设置 Content-Type: text/html* 若是数组或对象什么的内容,则会设置 Content-Type: application/json*/resp.setHeader(); // 手动设置响应头resp.status(302).header(location, "").end(); // 设置状态码,重定向到百度// 语法糖 - 简化上句代码resp.status(302).location("").end();// 或resp.redirect(302, ""); // 默认 301 永久重定向});app.get("*", (req, res) => {// 匹配所有路径的 get 请求// ...});
REST API
摘自 → 简书
api 与用户的通信协议,总是使用 HTTPS 协议以保证数据传输的安全性。
应该尽量将 api 部署在专用域名之下 -
如果 api 很简单,不会有进一步的扩展,可以放在主域名之下 -/api/
应该将 api 的版本号放入 url -https://api.xxx.xom/version1/
另一种做法是将版本号放入 http 头信息之中,但不如在 url 中直观
路径(EndPoint) - 表示 api 的具体网址。
在 RESTful 架构中,每个网址代表一种资源(resource),所以网址中只能有名词,而且名词往往对应数据库表。所以 api 中的名词一般使用复数名词。
对于资源的具体操作类型,由 http 动词表示(常用的有下面 5 个):
GET (SELECT) ------- 从服务器取出资源(一项或多项)。
POST(CREATE) ----- 在服务器新建一个资源。
PUT(UPDATE) ------ 在服务器更新资源(客户端提供改变后的完整资源)。
PATCH(UPDATE) ---- 在服务器更新资源(客户端提供改变的属性)。
DELETE(DELETE) — 从服务器删除资源。
以及两个不常用的 http 动词 – HEAD / OPTIONS
例如:
统一的 api 接口,通过不同的请求方法完成操作
/api/student ----------- post ---------- 添加学生
/api/student ----------- get ----------- 获取学生信息
/api/student/:id ------- get ----------- 获取某个学生信息
/api/student ----------- put ----------- 修改学生信息
/api/student/:id ------- put ----------- 修改某个学生信息
/api/student ----------- delete -------- 删除学生
… 依次类推
过滤信息
如果存在数据量很大,不可能全部返回给客户端。所以通过 api 提供参数,过滤结果
?limit=10 -------------- 指定返回 10 条数据
?offset=10 ------------- 指定跳过 10 条
?page=x&per_page=y ----- 指定第 x 页,及每页数据量
… 以及一些其他筛选条件
参数的设计允许存在冗余,即允许API路径和URL参数偶尔有重复。比如:
GET /zoo/ID/animals
与GET /animals?zoo_id=ID
的含义是相同的。
状态码: 服务器向用户返回的状态码和提示信息(常见的 200, 301, 302, 400, 403, 404, 500等)
错误处理:状态码是4xx
,就应该向用户返回错误信息。
返回结果:针对不同的操作,服务器向用户返回的结果应该符合以下规范:
GET ------ /collection:返回资源对象的列表(数组)
GET ------ /collection/resource:返回单个资源对象
POST
如果觉得《express 初步认知》对你有帮助,请点赞、收藏,并留下你的观点哦!