json-server 使用全攻略(一)

安装

$ npm install -g json-server

资源的使用

1. json文件源

$ json-server db.json
$ json-server --host 192.168.1.102 -p 6000 db.json

注意:如不使用--host则只绑定在localhost上

  1. 必须是对象格式
  2. 需要有id,名字默认是id
{
  "posts": [
    { "id": 1, "title": "json-server", "author": "typicode" }
  ],
  "comments": [
    { "id": 1, "body": "some comment", "postId": 1 }
  ],
  "profile": { "name": "typicode" }
}

2. url 源

$ json-server http://example.com/file.json
$ json-server http://jsonplaceholder.typicode.com/db
  1. 必须是对象格式
  2. 需要有id,名字默认是id

3. js模块源

格式:

// index.js
module.exports = () => {
  const data = { users: [] }
  // Create 1000 users
  for (let i = 0; i < 1000; i++) {
    data.users.push({ id: i, name: `user${i}` })
  }
  return data
}

启动:

$ json-server index.js

过滤方式(Filter)

GET /posts?title=json-server&author=typicode
GET /posts?id=1&id=2
GET /comments?author.name=typicode

分页方式(Paginate)

GET /posts?_page=7
GET /posts?_page=7&_limit=20

排序

GET /posts?_sort=views&_order=asc
GET /posts/1/comments?_sort=votes&_order=asc
// 多排序
GET /posts?_sort=user,views&_order=desc,asc

切片(Slice)

GET /posts?_start=20&_end=30
GET /posts/1/comments?_start=20&_end=30
GET /posts/1/comments?_start=20&_limit=10

全文检索(Full-text search)

GET /posts?q=internet

静态网页服务器

  1. 直接使用 ./public 文件夹下的静态资源即可
mkdir public
echo 'hello world' > public/index.html
json-server db.json
  1. 指定静态资源:
json-server db.json --static ./some-other-dir

映射成为新的url资源

  1. Create a routes.json file:
{
  "/api/*": "/$1",
  "/:resource/:id/show": "/:resource/:id",
  "/posts/:category": "/posts?category=:category",
  "/articles\\?id=:id": "/posts/:id"
}
  1. Start json-server:
json-server db.json --routes routes.json
  1. 资源映射后的效果:
/api/posts # → /posts
/api/posts/1  # → /posts/1
/posts/1/show # → /posts/1
/posts/javascript # → /posts?category=javascript
/articles?id=1 # → /posts/1

定制请求和响应

// hello.js
module.exports = (req, res, next) => {
  res.header('X-Hello', 'World')
  next()
}

启动方式:

json-server db.json --middlewares ./hello.js
json-server db.json --middlewares ./first.js ./second.js

启动选项列表:

以下选项,多数可以使用json-server的配置文件(./json-server.json)完成配置

json-server [options] <source>

Options:
  --config, -c       Path to config file           [default: "json-server.json"]
  --port, -p         Set port                                    [default: 3000]
  --host, -H         Set host                             [default: "localhost"]
  --watch, -w        Watch file(s)                                     [boolean]
  --routes, -r       Path to routes file
  --middlewares, -m  Paths to middleware files                           [array]
  --static, -s       Set static files directory
  --read-only, --ro  Allow only GET requests                           [boolean]
  --no-cors, --nc    Disable Cross-Origin Resource Sharing             [boolean]
  --no-gzip, --ng    Disable GZIP Content-Encoding                     [boolean]
  --snapshots, -S    Set snapshots directory                      [default: "."]
  --delay, -d        Add delay to responses (ms)
  --id, -i           Set database id property (e.g. _id)         [default: "id"]
  --foreignKeySuffix, --fks  Set foreign key suffix, (e.g. _id as in post_id)
                                                                 [default: "Id"]
  --quiet, -q        Suppress log messages from output                 [boolean]
  --help, -h         Show help                                         [boolean]
  --version, -v      Show version number                               [boolean]

一个json-server.json的配置示例:

{
  "port": 8080,
  "id": "_id",
  "delay": 1000,
  "routes": "routes.json"
}

示例数据:

  1. 咖啡
{
    "cafe": [
      { "id":1,"name": "美式", "price": 28.5, "stock": 5 },
      { "id":2,"name": "espresso", "price": 32.00, "stock": 6 },
      { "id":3,"name": "卡布", "price": 39.3, "stock": 2 },
      {"id":4, "name": "焦玛", "price": 41.0, "stock": 0 },
      {"id":5, "name": "<span>拿铁</span>", "price": 36.8, "stock": 1 }
    ]
  }
  1. 唱片:
{
    "albums":[
        {
          "id": 1,
          "name": "勇气",
          "singer": [
            "梁静茹"
          ],
          "img": "https://y.gtimg.cn/music/photo_new/T002R300x300M000001DEgPu1004bl_1.jpg?max_age=2592000"
        },
        {
          "id": 2,
          "name": "年少有为",
          "singer": [
            "李荣浩"
          ],
          "img": "https://y.gtimg.cn/music/photo_new/T002R300x300M000004QnEHc3zjC7J_1.jpg?max_age=2592000"
        },
        {
          "id": 3,
          "name": "当真",
          "singer": [
            "蒋蒋",
            "曲肖冰"
          ],
          "img": "https://y.gtimg.cn/music/photo_new/T002R300x300M000000RgBrK06p5mH_1.jpg?max_age=2592000"
        },
        {
          "id": 4,
          "name": "Sugar",
          "singer": [
            "Maroon 5"
          ],
          "img": "https://y.gtimg.cn/music/photo_new/T002R300x300M000001QUxsr2KyrU0_1.jpg?max_age=2592000"
        },
        {
          "id": 5,
          "name": "浅橘色孤岛 (Live)",
          "singer": [
            "戴燕妮",
            "段艺璇",
            "宋昕冉",
            "许馨文",
            "徐紫茵",
            "张钰",
            "左卓"
          ],
          "img": "https://y.gtimg.cn/music/photo_new/T002R300x300M000001AqDHy2gFHum_1.jpg?max_age=2592000"
        },
        {
          "id": 6,
          "name": "Stuck with U",
          "singer": [
            "Ariana Grande",
            "Justin Bieber"
          ],
          "img": "https://y.gtimg.cn/music/photo_new/T002R300x300M000004SFY3Y3Cr3q4_1.jpg?max_age=2592000"
        },
        {
          "id": 7,
          "name": "点歌的人",
          "singer": [
            "海来阿木"
          ],
          "img": "https://y.gtimg.cn/music/photo_new/T002R300x300M000001NvtHt3hFmxE_1.jpg?max_age=2592000"
        },
        {
          "id": 8,
          "name": "句号",
          "singer": [
            "G.E.M. 邓紫棋"
          ],
          "img": "https://y.gtimg.cn/music/photo_new/T002R300x300M0000049MVh824D7bM_1.jpg?max_age=2592000"
        },
        {
          "id": 9,
          "name": "后来",
          "singer": [
            "刘若英"
          ],
          "img": "https://y.gtimg.cn/music/photo_new/T002R300x300M000003RFvvb1K3vxF_1.jpg?max_age=2592000"
        },
        {
          "id": 10,
          "name": "飘洋过海来看你",
          "singer": [
            "梁静茹",
            "艾怡良"
          ],
          "img": "https://y.gtimg.cn/music/photo_new/T002R300x300M000004CsWWe0Z6gFR_1.jpg?max_age=2592000"
        },
        {
          "id": 11,
          "name": "平凡之路 (《后会无期》电影主题曲)",
          "singer": [
            "朴树"
          ],
          "img": "https://y.gtimg.cn/music/photo_new/T002R300x300M000002aRnZM0garaC_1.jpg?max_age=2592000"
        },
        {
          "id": 12,
          "name": "告白气球",
          "singer": [
            "周杰伦"
          ],
          "img": "https://y.gtimg.cn/music/photo_new/T002R300x300M000003RMaRI1iFoYd_1.jpg?max_age=2592000"
        },
        {
          "id": 13,
          "name": "春娇与志明",
          "singer": [
            "街道办GDC",
            "欧阳耀莹"
          ],
          "img": "https://y.gtimg.cn/music/photo_new/T002R300x300M000000lrXyA0MlEEo_1.jpg?max_age=2592000"
        },
        {
          "id": 14,
          "name": "稻香",
          "singer": [
            "周杰伦"
          ],
          "img": "https://y.gtimg.cn/music/photo_new/T002R300x300M000002Neh8l0uciQZ_1.jpg?max_age=2592000"
        }
      ]
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352