Skip to content

yxqme/turquoise-mock

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

@ 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 /