@turquoise/mock
TypeScript icon, indicating that this package has built-in type declarations

1.1.3 • Public • Published

@ turquoise/mock

installation

# Use npm
npm i @ turquoise/mock -D

# Use the Yarn
yarn add turquoise/mock -D

Custom model

Sample file schema/api.ts, mock rules can find at mockjs

export default {
  'user|100': [
    {
      'id|+1': 1,
      name: '@cname',
      age: 4,
      mobile: '@mobile',
      createdAt: '@datetime',
      'status|1': ['enabled', 'disabled'],
    },
  ],
};

File structure

Project file structure that must be followed

|-- mock
    |-- routes // custom routes
    |-- schemas // schamas
    |-- random // extend mockjs Generator
    |-- middlewares // express middlewares
|-- .mockrc.ts // configuration

Custom routing

Sample file routes/user.ts

import { Request, Response } from 'express';

export default [
  {
    path: '/me',
    controller: (req: Request, res: Response): void => {
      res.json({
        mobile: '@mobile',
        username: 'xiaoming',
        role: ['admin', 'test'],
      });
    },
  },
];

Extended random generator

Sample file random/ext.ts

import Mock from 'mockjs';

export default {
  mobile(): string {
    return Mock.mock(/^1(9|3|4|5|7|8)[0-9]{9}$/);
  },
  lon(): number {
    return Mock.Random.float(121.140308, 121.82558, 7, 8);
  },
  lat(): number {
    return Mock.Random.float(30.853426, 31.363719, 7, 6);
  },
};

Middleware

Sample file middlewares/query.ts

import { Request, Response, NextFunction } from 'express';

module.exports = [
  function (req: Request, res: Response, next: NextFunction): void {
    if (req.method === 'PUT') {
      req.method = 'PATCH';
    }

    console.log('before hook');

    next();

    console.log('after hook');
  },
];

Launch configuration

Read the project root directory by default .mockrc.ts

Field Types of Defaults description
port number 3000 Service port
delay number 0 Simulated network latency
rewriter object {"/ api / *": "/ $ 1"} Rewrite routing
render function - json-serverIn the rendermethod
export default {
  // change port
  port: 3002,
};

Usage example

In package.json use in

{
   "scripts" : {
     "mock" : "turquoise-mock"
  }
}

start a mock server

# Use npm
npm run mock

# Use the Yarn
yarn run mock

REST API Routes

Based on the previous schema/api.ts , here are all the default routes.

reference json-server

Plural routes

GET    /users
GET    /users/1
POST   /users
PUT    /users/1
PATCH  /users/1
DELETE /users/1

Singular routes

GET    /profile
POST   /profile
PUT    /profile
PATCH  /profile

Filter

Use . to access deep properties

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

Paginate

Use _page and optionally _limit to paginate returned data.

In the Link header you'll get first, prev, next and last links.

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

10 items are returned by default

Sort

Add _sort and _order (ascending order by default)

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

For multiple fields, use the following format:

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

Slice

Add _start and _end or _limit (an X-Total-Count header is included in the response)

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

Works exactly as Array.slice (i.e. _start is inclusive and _end exclusive)

Operators

Add _gte or _lte for getting a range

GET /users?views_gte=10&views_lte=20

Add _ne to exclude a value

GET /users?id_ne=1

Add _like to filter (RegExp supported)

GET /users?title_like=server

Full-text search

Add q

GET /users?q=internet

Relationships

To include children resources, add _embed

GET /users?_embed=comments
GET /users/1?_embed=comments

To include parent resource, add _expand

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

To get or create nested resources

GET  /users/1/comments
POST /users/1/comments

Database

GET /db

Homepage

Returns default index file or serves ./public directory

GET /

Readme

Keywords

none

Package Sidebar

Install

npm i @turquoise/mock

Weekly Downloads

1

Version

1.1.3

License

MIT

Unpacked Size

132 kB

Total Files

23

Last publish

Collaborators

  • xiaoqiang.yang