emock-service

0.1.7 • Public • Published

emock-service

Downloads Downloads npm version dependencies dev dependencies License

emock-service提供模拟REST API服务,仅通过一些简单逻辑,就可以实现一个比较『完整、真实』的后端。在前后端分离开发的项目中,帮助前端人员快速开发。

特点

  • 调试数据
    • 根据资源的json schema描述随机生成调试需要的数据;
    • 开发人员手工构造json数据;
  • 使用json文件存储数据,模拟增删改查;
  • 自动生成资源的restful api;
  • 自定义路由,通过简单的代码处理请求;

安装

npm install emock-service

使用

  1. 撰写json schema或者构造json数据;
  2. 自定义路由(可跳过);
  3. 启动server。

示例

构造json数据

项目下新建db.json文件,增加以下内容:

{
    "users": [
        {
            "id": 1,
            "name": "jack"
        },
        {
            "id": 2,
            "name": "rose"
        }
    ]
}

启动server

import {server} from 'emock-service';
 
let options = {
    source: 'db.json',
    host: '127.0.0.1',
    port: 3000
};
server(options);

emock-service自动生成以下服务:

  • GET /users

    支持任意字段排序、分页、全字段搜索

    • order: descasc
    • orderBy: 字段名
    • page: 页码
    • pageSize: 每页显示条数
    • keyword: 搜索关键字
  • GET /users/:id

  • POST /users

  • PUT /users/:id

  • DELETE /users/:id

浏览器地址栏输入http://127.0.0.1:3000/users,可看到如下结果: 图片

利用json schema自动生成数据

emock-service可根据实体的json schema定义自动生成测试数据,目前json schema需满足以下要求:

  • 所有资源的json schema文件放在同一目录
  • 文件扩展名必须为.json
  • 使用id标识资源名称(待改进,json schema规范中id为当前json schema的资源标识符)
  • 为了生成看起来合法的数据,需要利用json schema关键字尽可能全面描述资源

json schema扩展字段

faker, chance

mock-service使用json-schema-faker生成实体数据,因此,需要在json schema的字段定义中引入faker, chance,调用fakerjs/chancejs对应的方法随机生成数据。

json schema示例

{
    "id": "user",
    "type": "object",
    "properties": {
        "name": {
            "type": "string",
            "maxLength": "100",
            "minLength": "2",
            "faker": "name.findName"
        }
    },
    "required": ["name"]
}

Notes: json schema中无需定义id,emock-service会生成唯一的id。

修改server启动配置:

import {server} from 'emock-service';
 
let options = {
    source: 'db.json',
    host: '127.0.0.1',
    port: 3000,
    // 自动生成数据使用的json schema所在路径
    schemaDir: 'path/to/schemas',
    // 为每个资源自动生成的数据条数,默认值10
    count: 20
};
server(options);

参考文档

资源依赖关系处理

资源之间一般存在关联关系,json schema不能描述资源之间的这种关系,缺少关联关系可能导致自动生成的数据不可用。因此emock-service了一种描述简单关联关系的方法,具体参见示例:

export default {
    user: {
        companyId: {
            resource: 'company',
            field: 'id'
        },
        companyIds: {
            resource: 'company',
            field: 'id'
        },
    }
};

上述对象表达的关联关系为:

  • 一个usercompanyId字段关联一个companyid字段;
  • 一个usercompanyIds字段关联多个companyid字段

建立关联关系的要求

  • 关联其他资源的资源,必须提供schema定义
  • 非必需字段,不作关联

关联关系的使用

import {server} from 'emock-service';
import relations from './relations';
 
let options = {
    source: 'db.json',
    host: '127.0.0.1',
    port: 3000,
    // 自动生成数据使用的json schema所在路径
    schemaDir: 'path/to/schemas',
    // 为每个资源自动生成的数据条数,默认值10
    count: 20,
    relations: relations
};
server(options);

自定义路由

自定义route中可以使用lowdb实例,个性化处理请求。

import {server} from 'emock-service';
 
let options = {
    source: 'db.json',
    host: '127.0.0.1',
    port: 3000,
    // 自动生成数据使用的json schema所在路径
    schemaDir: 'path/to/schemas',
    // 为每个资源自动生成的数据条数,默认值10
    count: 20,
    routes: [
        {
         url: '/api/js/users/verify',
         method: 'GET',
         handler(db, req, res, next) {
         }
        }
    ]
};
server(options);

其中req、res为express中的request/response实例,如何使用可参考express文档

db为lowdb实例,lowdb实例上有lodash API,可以借助lodash api便利的操作集合,lowdb文档

定制通用的增删改查逻辑

import {server} from 'emock-service';
 
let options = {
    source: 'db.json',
    host: '127.0.0.1',
    port: 3000,
    // 自动生成数据使用的json schema所在路径
    schemaDir: 'path/to/schemas',
    // 为每个资源自动生成的数据条数,默认值10
    count: 20,
    pluralOverrides: {
        list(db, name, request, response, next) {},
        get(db, name, request, response, next) {},
        create(db, name, request, response, next) {},
        update(db, name, request, response, next) {},
        delete(db, name, request, response, next) {}
    }
};
server(options);

参数说明:

  • db: 数据库实例
  • name: 资源名称,复数
  • request/response/next: express中相应对象

其他配置

constant:常量数据文件路径

有些常量数据,无法或者不需要使用json schema生成,可将其放在一个json文件中,emock-server启动时,从该文件中读取数据,copy到数据库。

urlPrefix

为所有自动生成的api增加urlPrefix前缀。

License

MIT

Readme

Keywords

none

Package Sidebar

Install

npm i emock-service

Weekly Downloads

1

Version

0.1.7

License

MIT

Last publish

Collaborators

  • yanghuabei