Data Mocking
Modern.js allows you to easily generate mock data so that the front-end can develop independently without depending on the back-end API.
Enabling Mock
By convention, when there is an index.[jt]s in the config/mock/ directory, mock data will be automatically enabled:
.
├── config
│   └── mock
│       └── index.ts
├── src
│   └── App.tsx
└── modern.config.ts
 
Writing Mock Files
The config/mock/index.ts file only needs to export an object containing all Mock APIs. The properties of the object are composed of the request configuration method and url, and the corresponding property values can be Object, Array, or Function:
export default {
  /* The attribute is the concrete method and request url, and the value is object or array as the result of the request */
  'GET /api/getInfo': { data: [1, 2, 3, 4] },
  /* the default method is GET */
  '/api/getExample': { id: 1 },
  /* You can use custom functions to dynamically return data, req and res are both Node.js HTTP objects. */
  'POST /api/addInfo': (req, res, next) => {
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.end('200');
  },
};
 
When you access http://localhost:8080/api/getInfo, the API will return JSON { "data": [1, 2, 3, 4] }.
Return Random Data
Libraries such as Mock.js can be used in config/mock/index.js to generate random data. For example:
const Mock = require('mockjs');
module.exports = {
  '/api/getInfo': Mock.mock({
    'data|1-10': [{ name: '@cname' }],
  }) /* => {data: [{name: "Jack"}, {name: "Jim"},  {name: "Mary"}} */,
};
 
Delayed Response
- You can do this by using the browser's "weak connection simulation" feature.
 
- Delays can be set via 
setTimeout, for example: 
export default {
  'api/getInfo': (req, res) => {
    setTimeout(() => {
      res.end('delay 2000ms');
    }, 2000);
  },
};
 
Use Mock On Demand
Under the config/mock/index.ts, you can also export the config to control the Mock service.
type MockConfig = {
  enable: ((req: IncomingMessage, res: ServerResponse) => boolean) | boolean;
};
export const config = {
  enable: false
}
 
Currently only the enable configuration is supported, which allows developers to control whether to execute mock.
NOTE
After modifying config, there is no need to restart the service, which will take effect immediately.