前面演示了如何安装并运行 json server
, 和使用第三方库真实化模拟数据 , 下面将展开更多的配置项和数据操做。css
在安装好json server以后,经过 json-server -h
能够看到以下配置项:前端
json-server [options] <source> Options: --config, -c 指定 config 文件 [默认: "json-server.json"] --port, -p 设置端口号 [default: 3000] --host, -H 设置主机 [默认: "0.0.0.0"] --watch, -w 监控文件 [boolean] --routes, -r 指定路由文件 --static, -s 设置静态文件 --read-only, --ro 只容许 GET 请求 [boolean] --no-cors, --nc 禁止跨域资源共享 [boolean] --no-gzip, --ng 禁止GZIP [boolean] --snapshots, -S 设置快照目录 [默认: "."] --delay, -d 设置反馈延时 (ms) --id, -i 设置数据的id属性 (e.g. _id) [默认: "id"] --quiet, -q 不输出日志信息 [boolean] --help, -h 显示帮助信息 [boolean] --version, -v 显示版本号 [boolean] Examples: bin db.json bin file.js bin http://example.com/db.json
既能够经过命令行方式单行配置,如node
json-server db.js -p 3003 -d 500 -q -r ./routes.json
,也能够经过 json-server.json
文件进行配置后:git
# /mock/json-server.json { "host": "0.0.0.0", "port": "3003", "watch": false, "delay": 500, "quiet": true, "routes": "./routes.json" }
运行github
json-server db.js
在 /mock
下创建 public
目录,便可直接访问其下的全部静态文件,包括但不限于js
, css
,markdown
文件等。web
地址栏输入 http://localhist:3003/readme.md
便可访问如下文件正则表达式
# /mock/public/readme.md # hello Mr DJ,这节奏不要停
经过 json server
创建的rest api服务默承认以在局域网中经过WIFI访问接口。
windows下面经过 ipconfig
查找到电脑的局域网地址.mac设备是经过 ifconfig | grep "inet " | grep -v 127.0.0.1
查看。
好比个人电脑局域网ip是 192.168.0.6
,在手机上访问 http://192.168.0.6:3003
便可。npm
能够经过自定义路由的形式,简化数据结构,或是创建高弹性的web api,例如json
# /mock/routes.json { "/news/:id/show": "/news/:id", "/topics/:id/show": "/news/:id", }
访问 /news/1/show
和 topics/1/show
均返回指定的 /news/1
内容。windows
* 须要注意的是,路由必须以 /
开头
相比在终端中直接输入各类命令,我更喜欢利用 node scripts
来处理任务,在 /mock
下创建文件 package.json
,而后运行 npm run mock
。
# /mock/package.json { "scripts": { "mock": "json-server db.js" } }
数据过滤是 json server
中很是强力的功能。经过url上简单的query字段,便可过滤出各类各样的数据。
示例数据源:
[ { "id": 0, "title": "元小总小把清保住影办历战资和总由", "desc": "共先定制向向圆适者定书她规置斗平相。要广确但教金更前三响角面等以白。眼查何参提适", "tag": "值集空", "views": 3810, "images": [ "http://dummyimage.com/200x100/79f2a5&text=别角置", "http://dummyimage.com/200x100/f28279&text=收面几容受取", "http://dummyimage.com/200x100/7993f2&text=作件" ] }, { "id": 1, "title": "物器许条对越复术", "desc": "方江周是府整头书生权部部条。始克识史但给又约同段十子按者感律备。关长厂平难山从合", "tag": "分七眼术保", "views": 4673, "images": [ "http://dummyimage.com/200x100/79f2a5&text=别角置" ] }, { "id": 2, "title": "但学却连质法计性想般最", "desc": "以群亲它天即资几行位具回同务度。场养验快但部光天火金时内我。任提教毛办结论感看还", "tag": "响六", "views": 4131, "images": [ "http://dummyimage.com/200x100/79f2a5&text=别角置", "http://dummyimage.com/200x100/f28279&text=收面几容受取", "http://dummyimage.com/200x100/7993f2&text=作件" ] }, ... { "id": 99, "title": "则群起然线部其深我位价业红候院", "desc": "为高值务须西生型住断况里听。志置开用她你然始查她响元还。照员给门次府此据它后支越", "tag": "何你", "views": 2952, "images": [ "http://dummyimage.com/200x100/79f2a5&text=别角置" ] } ]
使用 .
操做对象属性值
// 获取图片数量为3,且标签字数为2的新闻 GET /news?images.length=3&tag.length=2
使用 _start
和 _end
或者 _limit
(response中会包含 X-Total-Count
)
// 获取id=10开始的5篇新闻 GET /news?_start=10&_limit=5 // 获取id=20开始,id=35结束的新闻 GET /news?_start=20&_end=35
使用 _sort
和 _order
(默认使用升序(ASC))
// 按照浏览数量降序排列 GET /news?_sort=views&_order=DESC
使用 _gte
或 _lte
选取一个范围
// 选取浏览量在2000-2500之间的新闻 GET /news?views_gte=2000&views_lte=2500
使用 _ne
排除一个值
// 选择tag属性不是 "国际新闻" 的分类 GET /news?tag_ne=国际新闻
使用 _like
进行模糊查找 (支持正则表达式)
// 查找title中含有 "前端" 字样的新闻 GET /news?title_like=前端
使用 q
,在对象所有value中遍历查找包含指定值的数据
// 查找新闻所有字段包含 "强拆" 字样的数据 GET /news?q=强拆
获取包含下级资源的数据, 使用 _embed
GET /news?_embed=comments GET /news/1?_embed=comments
获取包含上级资源的数据, 使用 _expand
GET /news?_expand=post GET /news/1?_expand=post
除了独立做为rest api 服务器以外, json server
一样能够做为诸如 Express
之类框架的中间件使用,具体API详见 json server模块
json-server源码 : json-server
mockjs源码 : mockjs
demo : 示例代码
全文完