mm.config.js 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. const api = require(`./api/index.js`)
  2. const { wrapApiData } = require(`./util.js`)
  3. /**
  4. * 配置说明请参考文档:
  5. * https://hongqiye.com/doc/mockm/config/option.html
  6. * @type {import('mockm/@types/config').Config}
  7. */
  8. module.exports = async util => {
  9. const joi = await util.tool.generate.initPackge(`joi`)
  10. return {
  11. plugin: [util.plugin.validate, util.plugin.apiDoc],
  12. guard: false,
  13. port: 8100,
  14. testPort: 8105,
  15. replayPort: 8101,
  16. watch: [`./api/`],
  17. proxy: {
  18. '/': `http://www.httpbin.org/`, // 后端接口主域
  19. '/anything/intercept': [`origin`, `127.0.0.1`], // 修改接口返回的数据
  20. },
  21. api: {
  22. // 在其他文件里的 api
  23. ...api(util).api,
  24. "post /api/login": util.side({
  25. tags: [`admin`],
  26. summary: `根据用户名获取 token`,
  27. schema: {
  28. body: joi
  29. .object({
  30. username: joi
  31. .string()
  32. .default(`李蕾`)
  33. .required()
  34. .description(`用户名`),
  35. })
  36. .description(`用户信息`),
  37. },
  38. async action(req, res) {
  39. const { username } = req.body
  40. res.json({
  41. status: 200,
  42. message: `欢迎 ${username}, 登录成功`,
  43. token: `tokentoken`,
  44. })
  45. },
  46. }),
  47. // 当为基本数据类型时, 直接返回数据, 这个接口返回 {"msg":"ok"}
  48. '/api/1': {msg: `ok`},
  49. // 也可以像 express 一样返回数据
  50. '/api/2' (req, res) {
  51. res.send({msg: `ok`})
  52. },
  53. // 一个只能使用 post 方法访问的接口
  54. 'post /api/3': {msg: `ok`},
  55. // // 一个 websocket 接口, 会发送收到的消息
  56. // 'ws /api/4' (ws, req) {
  57. // ws.on('message', (msg) => ws.send(msg))
  58. // },
  59. // 一个下载文件的接口
  60. '/file' (req, res) {
  61. res.download(__filename, `mm.config.js`)
  62. },
  63. // 获取动态的接口路径的参数 code
  64. '/status/:code' (req, res) {
  65. res.json({statusCode: req.params.code})
  66. },
  67. // 使用 mockjs 生成数据
  68. '/user' (req, res) {
  69. const json = util.libObj.mockjs.mock({
  70. 'data|3-7': [{
  71. userId: `@id`,
  72. userName: `@cname`,
  73. }],
  74. })
  75. res.json(json)
  76. },
  77. },
  78. static: [],
  79. resHandleReplay: ({req, res}) => wrapApiData({code: 200, data: {}}),
  80. resHandleJsonApi: ({req, res: {statusCode: code}, data}) => wrapApiData({code, data}),
  81. }
  82. }