01-json-server实现增删改查
参考:
- json-server 库:https://www.npmjs.com/package/json-server
- json-server 源码:https://github.com/typicode/json-server
- json-server 文档:https://rtool.cn/jsonserver/docs/introduction
json-server -w db.json -p 8000注意:
db.json即在当前 db.json 目录下启动,如果附带其他路径,会出现一个很莫名其妙的问题。问题:
- 如果 json 数据中 id 主键为数字时,会导致 修改、删除 接口调用操作 json 文件时找不到该接口,报 404 问题。
- 如果手动修改了 db.json 文件保存之后,最好手动重启 json-server,否则关联父级或子级查询效果会不达预期。
介绍
json-server 可用于快速mock一个 REST API 服务器,让开发者能够专注于前端开发,同时轻松模拟后端 API,提高了开发效率和测试的准确性。
起步
- 使用 npm 全局安装 json-server :
npm i -g json-server - 可以通过查看版本号,来测试是否安装成功:
json-server -v
此时使用命令
json-server -v如果报错的话,则需要修改一下 windows 本机的脚本执行策略(允许执行脚本命令):
1
2Get-ExecutionPolicy //查看当前执行策略
Set-ExecutionPolicy RemoteSigned //修改执行策略
再次验证(已OK):
- 创建 json 数据——db.json
在任意一个文件夹下(此处假设我创建了一个server文件夹),进入到该文件夹里面,执行代码
json-server --watch db.json
- 此时文件夹下多出一个db.json文件


分别点击/posts /comments /profile /db链接,我们可以看到访问不同地址时不同的json数据。其中 /db返回的是整个json文件的数据。

指定端口号
json-server 默认是 3000 端口,我们也可以自己指定端口,指令如下:
1 | |
如果不想每次用这么长的指令,可以在db.json同级文件夹新建一个package.json,在script配置添加运行命令:
1 | |
运行的时候, 直接在当前文件夹下执行 npm run mock
操作数据
json-server 支持 restful 风格的 api ,可以通过不同的请求方式,对数据进行增删改查等不同的操作。
先修改db.json文件:
1 | |
get 获取数据
浏览器可以直接访问GET请求,我们可以直接在浏览器访问就能看到返回的json数据。
获取所有用户数据(对象数组): [http://localhost:3004/users](http://localhost:3004/users)
获取所有水果数据:http://localhost:3004/fruits
获取数据
根据 id 获取 users 数据:http://localhost:3004/users/1

上面的请求写法还可以通过get请求的query参数通过?方式来写:
1 | |
以此类推,我们可以传入不同的条件:
1 | |
多个条件
也可以指定多个条件,用&符号连接:
1 | |
甚至还可以使用对象取属性值 obj.key 的方式:
1 | |

分页
分页采用
_page来设置页码,_limit来控制每页显示条数。如果没有指定 _limit ,默认每页显示10条。
我们可以依次输入地址查看下面接口中返回不同的结果:
1 | |
排序
排序采用
_sort来指定要排序的字段,_order来指定排序是正排序还是逆排序(asc | desc ,默认是asc)。
1 | |
获取局部数据
采用
_start来指定开始位置,_end来指定结束位置、或者是用_limit来指定从开始位置起往后取几个数据。和 Array.slice() 方法类似。
1 | |
获取符合某个范围的数据
- 使用
_gte和_lte来设置一个取值范围 :
1 | |
- 使用
_ne来获取不包含某个值的数据:
1 | |
- 采用
_like来设置匹配某个字符串(或正则表达式):
1 | |
搜索功能
采用q来设置搜索内容:
1 | |
除get请求外,其他请求方式需要我们通过 api 调试工具或者代码的方式来使用。
post 新增数据
1 | |
当然你也可以使用 api 调试工具来测试接口,这里我使用 apifox:

delete 删除数据
通过id删除users里id为3的用户数据:
1 | |
put 修改数据 (替换)
PUT方法会更新整个资源对象,前端没有给出的字段,会自动清空。
1 | |
但是使用put修改后会有一个问题,只会保留提交的字段,没有提交的字段在json中将会被删除,如下图,我们更改了id为4的用户,只提交了name和age,原来的json文件中,phone字段被删除了:

这时候我们就要用到 patch 请求了:
patch 修改数据(部分)
只修改请求的字段,没有请求的字段将会被保留。
1 | |
关联检索
_embed 方式检索关联子级数据
注意: 这里 _embed 需要和子表名 (要关联的子集属性名) 匹配,同时确保关联的 id 如 classId 的值为 字符串(如果为数字则关联不上)
1 | |
得到的数据:
1 | |
_expand 方式检索关联父级数据
实测无效,关键字还是
_embed既可以检索子级也可以检索父级,如:children 中有 rightId
这里的 _expand=class 匹配的其实是为了和 users 对象中的 classId做关联,但是已经存在 classId 字段了,我们需要写出 class, 比如检索的是 repaId 我们旧写成 repa:
1 | |
得到的数据:
1 | |

