• 4、json-server的使用


    json-server 详解

    转载于https://www.cnblogs.com/fly_dragon/p/9150732.html
    

    JSON-Server 是一个 Node 模块,运行 Express 服务器,你可以指定一个 json 文件作为 api 的数据源。

    安装json-server

    npm install -g json-server
    

    启动 json-server

    json-server可以直接把一个json文件托管成一个具备全RESTful风格的API,并支持跨域、jsonp、路由订制、数据快照保存等功能的 web 服务器。

    db.json文件的内容:

    {
      "course": [
        {
          "id": 1000,
          "course_name": "马连白米且",
          "autor": "袁明",
          "college": "金并即总变史",
          "category_Id": 2
        },
        {
          "id": 1001,
          "course_name": "公拉农题队始果动",
          "autor": "高丽",
          "college": "先了队叫及便",
          "category_Id": 2
        }
      }
    }
    

    例如以下命令,把db.json文件托管成一个 web 服务。

    $ json-server --watch --port 53000 db.json
    

    输出类似以下内容,说明启动成功。

    {^_^}/ hi!
    
    Loading db.json
    Done
    
    Resources
    http://localhost:53000/course
    
    Home
    http://localhost:53000
    
    Type s + enter at any time to create a snapshot of the database
    Watching...
    

    此时,你可以打开你的浏览器,然后输入:http://localhost:53000/course

    json-server 的相关启动参数

    语法:json-server [options] <source>

    选项列表:

    参数简写默认值说明--config-c指定配置文件[默认值: "json-server.json"]--port-p设置端口 [默认值: 3000]Number--host-H设置域 [默认值: "0.0.0.0"]String--watch-wWatch file(s)是否监听--routes-r指定自定义路由 --middlewares-m指定中间件 files[数组]--static-sSet static files directory静态目录,类比:express的静态目录--readonly--roAllow only GET requests [布尔] --nocors--ncDisable Cross-Origin Resource Sharing [布尔] --nogzip, --ng Disable GZIP Content-Encoding [布尔] --snapshots-SSet snapshots directory [默认值: "."] --delay-dAdd delay to responses (ms) --id-iSet database id property (e.g. _id) [默认值: "id"] --foreignKeySuffix--fks Set foreign key suffix (e.g. _id as in post_id)[默认值: "Id"]--help-h显示帮助信息[布尔]--version-v显示版本号[布尔]

    • source可以是json文件或者js文件。实例:

      $ json-server --watch -c ./jsonserver.json
      $ json-server --watch app.js
      $ json-server db.json
      json-server --watch -port 8888 db.json

    动态生成模拟数据

    例如启动json-server的命令:json-server --watch app.js 是把一个js文件返回的数据托管成web服务。

    app.js配合mockjs库可以很方便的进行生成模拟数据。

    // 用mockjs模拟生成数据
    var Mock = require('mockjs');
    
    module.exports = () => {
      // 使用 Mock
      var data = Mock.mock({
        'course|227': [
          {
            // 属性 id 是一个自增数,起始值为 1,每次增 1
            'id|+1': 1000,
            course_name: '@ctitle(5,10)',
            autor: '@cname',
            college: '@ctitle(6)',
            'category_Id|1-6': 1
          }
        ],
        'course_category|6': [
          {
            "id|+1": 1,
            "pid": -1,
            cName: '@ctitle(4)'
          }
        ]
      });
      // 返回的data会作为json-server的数据
      return data;
    };
    

    路由

    默认的路由

    json-server为提供了GET,POST, PUT, PATCH ,DELETE等请求的API,分别对应数据中的所有类型的实体。

    # 获取所有的课程信息
    GET    /course
    
    # 获取id=1001的课程信息
    GET    /course/1001
    
    # 添加课程信息,请求body中必须包含course的属性数据,json-server自动保存。
    POST   /course
    
    # 修改课程,请求body中必须包含course的属性数据
    PUT    /course/1
    PATCH  /course/1
    
    # 删除课程信息
    DELETE /course/1
    
    # 获取具体课程信息id=1001
    GET    /course/1001
    

    自定义路由

    当然你可以自定义路由:

    $ json-server --watch --routes route.json db.json
    

    route.json文件

    {
      "/api/*": "/$1",    //   /api/course   <==>  /course
      "/:resource/:id/show": "/:resource/:id",
      "/posts/:category": "/posts?category=:category",
      "/articles\?id=:id": "/posts/:id"
    }
    

    自定义配置文件

    通过命令行配置路由、数据文件、监控等会让命令变的很长,而且容易敲错,可以把命令写到npm的scripts中,但是依然配置不方便。

    json-server允许我们把所有的配置放到一个配置文件中,这个配置文件默认json-server.json;

    例如:

    {
      "port": 53000,
      "watch": true,
      "static": "./public",
      "read-only": false,
      "no-cors": false,
      "no-gzip": false,
      "routes": "route.json"
    }
    

    使用配置文件启动json-server:

    # 默认使用:json-server.json配置文件
    $ json-server --watch app.js  
    
    # 指定配置文件
    $ json-server --watch -c jserver.json db.json
    

    过滤查询

    查询数据,可以额外提供

    GET /posts?title=json-server&author=typicode
    GET /posts?id=1&id=2
    
    # 可以用 . 访问更深层的属性。
    GET /comments?author.name=typicode
    

    还可以使用一些判断条件作为过滤查询的辅助。

    GET /posts?views_gte=10&views_lte=20
    

    可以用的拼接条件为:

    • _gte : 大于等于

    • _lte : 小于等于

    • _ne : 不等于

    • _like : 包含

      GET /posts?id_ne=1
      GET /posts?id_lte=100
      GET /posts?title_like=server

    分页查询

    默认后台处理分页参数为: _page 第几页, _limit一页多少条。

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

    默认一页10条。

    后台会返回总条数,总条数的数据在响应头:X-Total-Count中。

    排序

    • 参数: _sort设定排序的字段

    • 参数: _order设定排序的方式(默认升序)

      GET /posts?_sort=views&_order=asc
      GET /posts/1/comments?_sort=votes&_order=asc

    支持多个字段排序:

    GET /posts?_sort=user,views&_order=desc,asc
    

    任意切片数据

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

    全文检索

    可以通过q参数进行全文检索,例如:GET /posts?q=internet

    实体关联

    关联子实体

    包含children的对象, 添加_embed

    GET /posts?_embed=comments
    GET /posts/1?_embed=comments
    

    关联父实体

    包含 parent 的对象, 添加_expand

    GET /comments?_expand=post
    GET /comments/1?_expand=post
    

    其他高级用法

    json-server本身就是依赖express开发而来,可以进行深度定制。细节就不展开,具体详情请参考官网

    • 自定义路由
        const jsonServer = require('json-server')
        const server = jsonServer.create()
        const router = jsonServer.router('db.json')
        const middlewares = jsonServer.defaults()
        
        server.use(middlewares)
        
        server.get('/echo', (req, res) => {
          res.jsonp(req.query)
        })
        
        server.use(jsonServer.bodyParser)
        server.use((req, res, next) => {
          if (req.method === 'POST') {
            req.body.createdAt = Date.now()
          }
          next()
        })
        
        server.use(router)
        server.listen(3000, () => {
          console.log('JSON Server is running')
        })
    
    • 自定义输出内容
        router.render = (req, res) => {
          res.jsonp({
            body: res.locals.data
          })
        }
    
    • 自定义用户校验
        const jsonServer = require('json-server')
        const server = jsonServer.create()
        const router = jsonServer.router('db.json')
        const middlewares = jsonServer.defaults()
        
        server.use(middlewares)
        server.use((req, res, next) => {
         if (isAuthorized(req)) { // add your authorization logic here
           next() // continue to JSON Server router
         } else {
           res.sendStatus(401)
         }
        })
        server.use(router)
        server.listen(3000, () => {
          console.log('JSON Server is running')
        })
    
  • 相关阅读:
    DataTable.Compute功能
    ip的划分,超详细
    静态页 htm传参数
    [你必须知道的.NET] 第四回:后来居上:class和struct
    [你必须知道的.NET] 第八回:品味类型值类型与引用类型(上)-内存有理
    [你必须知道的.NET] 第五回:深入浅出关键字把new说透
    作废
    XML Schema <第三篇>
    XML基础<第一篇>
    NHibernate之配置文件属性说明
  • 原文地址:https://www.cnblogs.com/zhongchao666/p/9626948.html
Copyright © 2020-2023  润新知