{"id":20519630,"url":"https://github.com/xiao555/mock-server","last_synced_at":"2025-04-14T02:10:41.001Z","repository":{"id":28062357,"uuid":"113816540","full_name":"xiao555/mock-server","owner":"xiao555","description":"A flexible and fast mock server","archived":false,"fork":false,"pushed_at":"2022-12-08T18:21:19.000Z","size":351,"stargazers_count":8,"open_issues_count":7,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-04-15T00:50:17.018Z","etag":null,"topics":["cli","json","mock-server"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xiao555.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-12-11T05:32:50.000Z","updated_at":"2020-12-16T01:41:19.000Z","dependencies_parsed_at":"2022-08-07T13:15:14.450Z","dependency_job_id":null,"html_url":"https://github.com/xiao555/mock-server","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiao555%2Fmock-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiao555%2Fmock-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiao555%2Fmock-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xiao555%2Fmock-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xiao555","download_url":"https://codeload.github.com/xiao555/mock-server/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248809046,"owners_count":21164896,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","json","mock-server"],"created_at":"2024-11-15T22:15:06.260Z","updated_at":"2025-04-14T02:10:40.976Z","avatar_url":"https://github.com/xiao555.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Mock Server\n\n[![travis-ci](https://travis-ci.org/xiao555/mock-server.svg?branch=master)](https://travis-ci.org/xiao555/mock-server)\n[![Coverage Status](https://coveralls.io/repos/github/xiao555/mock-server/badge.svg?branch=master)](https://coveralls.io/github/xiao555/mock-server?branch=master)\n[![npm](https://img.shields.io/npm/dt/cf-mock-server.svg)](https://www.npmjs.com/package/cf-mock-server)\n[![npm](https://img.shields.io/npm/v/cf-mock-server.svg)](https://www.npmjs.com/package/cf-mock-server)\n[![node version](https://img.shields.io/badge/node.js-%3E=_7.10.1-green.svg)](http://nodejs.org/download/)\n[![license](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/xiao555/mock-server/blob/master/LICENSE)\n\n一个轻量化的本地mock服务器\n\n## Features\n\n* 支持中间件方式挂载服务，可用于Express和Koa搭建的Node服务\n* 支持命令行方式启动服务\n* 支持Node启动Express服务作为Mock Server\n* 支持监听配置文件和数据文件，修改热更新\n* 支持请求参数配置使用正则表达式\n* 支持RESTful风格的API, 路径可通过通配符匹配\n* 支持自定义函数处理返回结果, 可自定义Response Header, 模拟延迟等\n\n## Install\n\n### CLI\n\n```bash\n// Install\nnpm install -g cf-mock-server\n\n// CLI\nUsage: mock [options] \u003cfile ...\u003e\n\n\nOptions:\n\n  -V, --version        output the version number\n  -p, --port \u003cport\u003e    Define the mock server started port, default is 8008\n  -c, --config \u003cfile\u003e  Custom profiles, default is mock/config.js\n  -h, --help           output usage information\n```\n\n### Module\n\n```shell\n// Install\nnpm install cf-mock-server --save-dev\n```\n\n## Usage\n\n### 搭配Vue-cli项目\n\n#### Vue CLI 3\n\nVue Cli 3 的项目可通过配置vue.config.js将mock服务以中间件的形式挂载到开发服务器上\n\n``` javascript\n// mockserver是单独的node服务采用proxy方式\nmodule.exports = {\n  devServer: {\n    proxy: 'http://localhost:8008', // will proxy all request\n  }\n}\n\n// 也可以以中间件形式挂载到webpack-dev-server上\nconst mock = require('cf-mock-server/express-mw')\nconst path = require('path')\n\nconst options = {\n  config: path.join(__dirname, './mock'),\n  watchs: [path.join(__dirname, './mock')] // 监听mock目录下的所有js文件，热更新\n}\n\nmodule.exports = {\n  devServer: {\n    clientLogLevel: 'info',\n    after: (app) =\u003e {\n      app.use(mock(options))\n    }\n  }\n}\n```\n\n#### Vue CLI 2.x\n\n之前版本的Vue Cli只能单独启动一个mock服务器, 通过配置proxyTable将开发服务器的请求代理到mock服务器\n\n``` javascript\n// mock.js\nconst path = require('path')\nlet Mock = require('cf-mock-server')\n\nlet app = new Mock({\n  config: path.join(__dirname, './config'), // 配置文件\n  watch: true, // 观察模式，监听配置文件改动自动应用\n})\n\napp.run()\n\n// config/index.js\ndev: {\n  proxyTable: {\n    '/api': 'http://127.0.0.1:8008', // will proxy request with '/api' prefix\n  },\n}\n```\n\n### API配置文件\n\n支持JSON和JS格式\n\n```javascript\n// config.js\n// 数据文件根目录，如果API数据是文件路径则需要配置此项\nexports.dataFile = '../{YOUDATAFOLDER}'\n/**\n * API配置, 路径支持通配符，参数支持通配符，正则(右斜杠需要两个)和不完全匹配\n * KEY: '{METHOD} {router}'\n * VALUE: JSON字符串或数据文件路径，相对于dataFile, 可省略扩展名\n */\nexports.api = {\n  'GET /api/users/all': 'all_users',  // only match /api/users/all\n  'GET /api/users/all?name=sam': 'users/example', // =\u003e /api/users/all?name=sam\u0026age=18\n  'GET /api/users/?name=*': 'users/tom.json', // =\u003e /api/users/?name={anyone}\n  'GET /api/v1/users/tom': 'users/tom.json',// only match /api/v1/users/tom\n  'GET /api/v1/users/*': 'users/example', // =\u003e /api/v1/users/{anyone}\n  'GET /api/v1/*/tom': 'users/tom.json', // =\u003e /api/v1/{anyone}/tom\n  'GET /api/**/tom': 'users/tom.json', // =\u003e /api/({anyone}/)*tom\n  'GET /api/users/?name=/^A.*\\\\^$/': 'users/example', // =\u003e /api/users/?name=A{.*}^\n  'POST /api/users': (req, res) =\u003e { // 自定义函数 API参考 express\n    if (req.body.name === 'tom') {\n      res.status(200).send({ message: 'Create user success!' })\n    }\n  },\n}\n```\n\n### Config\n\n接口对应的结果可以是 JSON字符串，JSON文件路径，JS文件路径甚至是TXT文件路径，也可以是自定义函数处理返回\n\n如果需要配置文件路径，必须设置dataFile字段(数据文件所在的目录), 文件路径写成相对路径即可\n\n```javascript\n// index.js\nlet Mock = require('cf-mock-server')\n\nlet app = new Mock({\n  config: {\n    dataFile: './mockData',\n    api: {\n      'GET /api/users/all': '[{\"name\":\"tom\"},{\"name\":\"jerry\"}]',\n      'GET /api/users/?name=tom': 'users/tom.json',\n      'GET /api/users/?name=/^A.*\\\\^$/': 'users/tom.js',\n      'GET /api/users/?name=*': 'users/tom.txt',\n      'POST /api/users': (req, res) =\u003e {\n        if (req.body.name === 'tom') {\n          res.status(200).send({ message: 'Create user success!' })\n        }\n      },\n    }\n  },\n  watch: true,\n})\n\napp.run()\n```\n\n### CLI\n\n``` shell\nmock -c config.js\n\n// Output\n[MOCK] server started on port 8008\n\n// Usage\n➜  ~ curl http://localhost:8008/api/users/\\?name\\=A\\^\n{\"name\":\"jerry\",\"age\":18}%\n```\n\n### Mock API\n\n通过`new Mock()`方式可以创建一个Koa服务\n\n##### new Mock(options)\n\n创建Mock实例，可以通过options传API配置和设置端口\n\n``` javascript\nlet mock = new Mock({\n  config: path.join(__dirname, './config'), // Mock API 配置, Object or file path\n  port: 8009, // 服务监听的端口号\n})\n```\n\n##### mock.setPort(port)\n\n设置服务监听的端口\n\n``` javascript\nmock.setPort(8009)\n```\n\n##### mock.setConfig(config)\n\n设置API配置\n\n``` javascript\nmock.setConfig(path.join(__dirname, './config'))\n\nmock.setConfig({ api: { 'GET /api/users/all': '[{\"name\":\"tom\"},{\"name\":\"jerry\"}]' } })\n```\n\n##### mock.run()\n\n启动服务, 并返回koa实例\n\n``` javascript\nmock.run()\n```\n\n## LICENSE\n\n[MIT](https://opensource.org/licenses/MIT)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxiao555%2Fmock-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxiao555%2Fmock-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxiao555%2Fmock-server/lists"}