This is dev support mock RESTful API.
npm install mocker-api
中文 ·
Quick Start ·
Usage ·
Options ·
Delayed ·
Example ·
License ·
type
mocker-api creates mocks for REST APIs. It is helpful when you need to test your application without the actual REST API server.
Features:
🔥 Built-in support for hot Mocker file replacement.
🚀 Quickly and easily configure the API via JSON.
🌱 Mock API proxying made simple.
💥 Can be used independently without relying on webpack and webpack-dev-server.
``bash
mkdir mocker-app && cd mocker-app
Installation
you can put it the
package.json config as a current project dependency.`bash
npm install mocker-api --save-dev
`Usage
mocker-api dev support mock, configured in mocker/index.js.you can modify the http-proxy options and add the event listeners by adding the httpProxy configuration
`js
const proxy = {
// Priority processing.
// apiMocker(app, path, option)
// This is the option parameter setting for apiMocker
_proxy: {
proxy: {
// Turn a path string such as /user/:name into a regular expression.
// https://www.npmjs.com/package/path-to-regexp
'/repos/*path': 'https://api.github.com/',
'/:owner/:repo/raw/:ref/*path': 'http://127.0.0.1:2018',
'/api/repos/*path': 'http://127.0.0.1:3721/'
},
// rewrite target's url path. Object-keys will be used as RegExp to match paths.
// https://github.com/jaywcjlove/mocker-api/issues/62
pathRewrite: {
'^/api/repos/': '/repos/',
},
changeHost: true,
// modify the http-proxy options
httpProxy: {
options: {
ignorePath: true,
},
listeners: {
proxyReq: function (proxyReq, req, res, options) {
console.log('proxyReq');
},
},
},
},
// =====================
// The default GET request.
// https://github.com/jaywcjlove/mocker-api/pull/63
'/api/user': {
id: 1,
username: 'kenny',
sex: 6
},
'GET /api/user': {
id: 1,
username: 'kenny',
sex: 6
},
'GET /api/user/list': [
{
id: 1,
username: 'kenny',
sex: 6
}, {
id: 2,
username: 'kenny',
sex: 6
}
],
'GET /api/:owner/:repo/raw/:ref/*path': (req, res) => {
const { owner, repo, ref } = req.params;
// http://localhost:8081/api/admin/webpack-mock-api/raw/master/add/ddd.md
// owner => admin
// repo => webpack-mock-api
// ref => master
// req.params.path => add/ddd.md
return res.json({
id: 1,
owner, repo, ref,
path: req.params.path
});
},
'POST /api/login/account': (req, res) => {
const { password, username } = req.body;
if (password === '888888' && username === 'admin') {
return res.json({
status: 'ok',
code: 0,
token: "sdfsdfsdfdsf",
data: {
id: 1,
username: 'kenny',
sex: 6
}
});
} else {
return res.status(403).json({
status: 'error',
code: 403
});
}
},
'DELETE /api/user/:id': (req, res) => {
console.log('---->', req.body)
console.log('---->', req.params.id)
res.send({ status: 'ok', message: '删除成功!' });
}
}
module.exports = proxy;
`Options
proxy => {} Proxy settings, Turn a path string such as /user/:name into a regular expression.
- pathRewrite => {} rewrite target's url path. Object-keys will be used as RegExp to match paths. #62
- withFullUrlPath=false => Boolean the proxy regular expression support full url path. if the proxy regular expression like /test?a=1&b=1 can be matched. #25
- priority => proxy priority proxy or mocker #151
- changeHost => Boolean Setting req headers host.
- httpProxy => {} Set the listen event and configuration of http-proxy
- bodyParserJSON JSON body parser
- bodyParserText Text body parser
- bodyParserRaw Raw body parser
- bodyParserUrlencoded URL-encoded form body parser
- bodyParserConf => {} bodyParser settings. eg: bodyParserConf : {'text/plain': 'text','text/html': 'text'} will parsed Content-Type='text/plain' and Content-Type='text/html' with bodyParser.text
- watchOptions => object Options object as defined chokidar api options
- header => {} Access Control Allow options.
`js
{
header: {
'Access-Control-Allow-Methods': 'POST, GET, OPTIONS, PUT, DELETE',
}
}
`⚠️ No wildcard asterisk ~~
~~ - use parameters instead (.), support v1.7.3+⚠️ No wildcard asterisk ~~
(.)~~ - use parameters instead path, support v3.0.0+Delayed Response
You can use functional tool to enhance mock. #17
`js
const delay = require('mocker-api/delay');
const noProxy = process.env.NO_PROXY === 'true';const proxy = {
'GET /api/user': {
id: 1,
username: 'kenny',
sex: 6
},
// ...
}
module.exports = (noProxy ? {} : delay(proxy, 1000));
`apiMocker
`js
apiMocker(app, mockerFilePath[, options])
apiMocker(app, Mocker[, options])
`Multi entry
mocker file watching`js
const apiMocker = require('mocker-api');
const mockerFile = ['./mock/index.js'];
// or
// const mockerFile = './mock/index.js';
apiMocker(app, mockerFile, options)
`Example
$3
>⚠️ Not dependent on webpack and webpack-dev-server.
`bash
Global install dependent.
npm install mocker-api -g
Run server
mocker ./mocker/index.js
`Or you can put it the
package.json config as a current project dependency.`diff
{
"name": "base-example",
"scripts": {
+ "api": "mocker ./mocker"
},
"devDependencies": {
+ "mocker-api": "2.9.5"
},
+ "mocker": {
+ "port": 7788
+ },
"license": "MIT"
}
`$3
To use api mocker on your express projects.
>⚠️ Not dependent on webpack and webpack-dev-server.
`diff
const express = require('express');
+ const path = require('path');
+ const apiMocker = require('mocker-api');const app = express();
+ apiMocker(app, path.resolve('./mocker/index.js'))
app.listen(8080);
`or
`diff
const express = require('express');
+ const apiMocker = require('mocker-api');const app = express();
+ apiMocker(app, {
+ 'GET /api/user': {
+ id: 1,
+ sex: 0
+ }
+ });
app.listen(8080);
`$3
To use api mocker on your Webpack projects, simply add a setup options to your webpack-dev-server options:
Change your config file to tell the dev server where to look for files:
webpack.config.js.`diff
const HtmlWebpackPlugin = require('html-webpack-plugin');
+ const path = require('path');
+ const apiMocker = require('mocker-api');module.exports = {
entry: {
app: './src/index.js',
},
output: {
filename: '[name].bundle.js',
path: path.resolve(__dirname, 'dist')
},
+ devServer: {
+ ...
+ before(app){
+ apiMocker(app, path.resolve('./mocker/index.js'), {
+ proxy: {
+ '/repos/*path': 'https://api.github.com/',
+ '/:owner/:repo/raw/:ref/*path': 'http://127.0.0.1:2018'
+ },
+ changeHost: true,
+ })
+ }
+ },
plugins: [
new HtmlWebpackPlugin({
template: path.resolve('./public/index.html'),
title: 'Webpack App Mocker API'
})
],
};
`Must have a file suffix! For example:
./mocker/index.js.Let's add a script to easily run the dev server as well:
package.json`diff
{
"name": "development",
"version": "1.0.0",
"description": "",
"main": "webpack.config.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
+ "start": "webpack serve --progress --mode development",
"build": "webpack --mode production"
},
"keywords": [],
"author": "",
"license": "MIT",
"devDependencies": {
"html-webpack-plugin": "4.5.0",
"mocker-api": "2.9.5",
"webpack": "5.22.0",
"webpack-cli": "4.5.0",
"webpack-dev-server": "3.11.2"
}
}
`Mock API proxying made simple.
`diff
{
before(app){
+ apiMocker(app, path.resolve('./mocker/index.js'), {
+ proxy: {
+ '/repos/*path': 'https://api.github.com/',
+ },
+ changeHost: true,
+ })
}
}
`$3
To use api mocker on your create-react-app projects. create
src/setupProxy.js and place the following contents in it:`diff
+ const apiMocker = require('mocker-api');
+ const path = require('path');module.exports = function(app) {
+ apiMocker(app, path.resolve('./mocker/index.js'), {
+ proxy: {
+ '/repos/*path': 'https://api.github.com/',
+ },
+ changeHost: true,
+ });
};
``diff
{
.....
"devDependencies": {
+ "mocker-api": "2.9.5"
},
....
}
`$3
`shell
$ yarn install
$ yarn run build
$ yarn run watch
$ yarn run test
``As always, thanks to our amazing contributors!
Made with github-action-contributors.