@turquoise/mock
v1.1.3
Published
- [@ turquoise/mock](#-turquoisemock) - [installation](#installation) - [Custom model](#custom-model) - [File structure](#file-structure) - [Custom routing](#custom-routing) - [Extended random generator](#extended-random-generator) - [Middlewa
Readme
@ turquoise/mock
installation
# Use npm
npm i @ turquoise/mock -D
# Use the Yarn
yarn add turquoise/mock -DCustom 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 // configurationCustom 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 mockREST 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/1Singular routes
GET /profile
POST /profile
PUT /profile
PATCH /profileFilter
Use . to access deep properties
GET /users?title=json-server&author=typicode
GET /users?id=1&id=2
GET /comments?author.name=typicodePaginate
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=2010 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=ascFor multiple fields, use the following format:
GET /users?_sort=user,views&_order=desc,ascSlice
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=10Works 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=20Add _ne to exclude a value
GET /users?id_ne=1Add _like to filter (RegExp supported)
GET /users?title_like=serverFull-text search
Add q
GET /users?q=internetRelationships
To include children resources, add _embed
GET /users?_embed=comments
GET /users/1?_embed=commentsTo include parent resource, add _expand
GET /comments?_expand=post
GET /comments/1?_expand=postTo get or create nested resources
GET /users/1/comments
POST /users/1/commentsDatabase
GET /dbHomepage
Returns default index file or serves ./public directory
GET /