Day17:前后端交互 + RESTful API

3 阅读2分钟

今天把两个小任务合并跑通了:前端页面通过 fetch 请求后端接口,后端提供了 GET /usersGET /users/:idPOST /users 三个接口。
中间踩了 URL 写错 的坑,最后理解了“增删改查的 URL 规则”。


一、任务一:前后端交互(前端拿数据 + 显示)

后端代码 server.js

前端代码 index.html

关键点

概念解释
fetch浏览器自带的发请求方法,返回 Promise
res.json()把响应转成 JS 对象
document.getElementById找到网页上的元素
innerHTML修改元素里面的内容
跨域端口不同浏览器会拦,用 res.setHeader 解决

二、任务二:待办 API(增删改查)

增删改查 URL 规则(最重要)

操作方法URL说明
查所有GET/users不加 id
查单个GET/users/1加 id
新增POST/users不加 id
删除DELETE/users/1加 id
整体修改PUT/users/1加 id
部分修改PATCH/users/1加 id

三、常见状态码

状态码含义使用场景
200OK获取数据成功
201Created新增数据成功
204No Content删除成功(无内容返回)
400Bad Request前端传的参数不对
404Not Found资源不存在
500Internal Server Error后端代码报错

四、今天踩的坑 & 解决

原因解决
页面不显示“加载中”网速太快,瞬间完成加 setTimeout 验证,不验证也不影响功能
fetch 写法没见过没学过 Promise 的应用形式知道 fetch 返回 Promise,照抄模板
POST 返回 404URL 写成了 /users/1改成 /users

五、搞混的地方

请求是谁发给谁?前端(浏览器)发请求给后端(Express),不是反过来
res.json() 是 Express 的方法还是原生的?Express 提供的,自动设 Content-Type: application/json
<p id="info">加载中</p> 为什么不显示?网速太快,瞬间被替换。加 2 秒延迟就能看到
fetch 和 Promise 的关系?fetch 返回 Promise,.then 和 .catch 就是 Promise 的写法

2.RESTful是一套 API 设计规则:URL 表示资源,HTTP 方法表示操作

3.next() =  “当前中间件干完了,放行去下一个”

4.res.sendFile 是 Express 对 fs.readFile + res.end 的封装,底层确实用了路径拼接(path.join