使用 我的应用 也是一种 支持 我的方式:
Scap: Screenshot & Markup Edit Screen Test Deskmark Keyzer Vidwall Hub VidCrop Vidwall Mousio Hint Mousio Musicer Audioer FileSentinel FocusCursor Videoer KeyClicker DayBar Iconed Menuist Quick RSS Quick RSS Web Serve Copybook Generator DevTutor for SwiftUI RegexMate Time Passage Iconize Folder Textsound Saver Create Custom Symbols DevHub Resume Revise Palette Genius Symbol Scribe

Mocker API LOGO

Buy me a coffee Follow On X Build & Deploy Download
Repo Dependents Open in unpkg npm version

English · 快速开始 · 使用 · 参数设置 · 延迟响应 · 实例 · License · Type

mocker-api 用于创建 REST API 的模拟。当你需要在没有实际 REST API 服务器的情况下测试你的应用程序时,它会非常有用。

特点:

🔥 内置对热替换 Mocker 文件的支持。
🚀 通过 JSON 快速轻松地配置 API。
🌱 简化的 Mock API 代理。
💥 可以独立使用,不依赖于 webpackwebpack-dev-server

快速开始

mkdir mocker-app && cd mocker-app

# 根据规则创建模拟程序配置文件
touch api.js

# 全局安装。
npm install mocker-api -g
# 运行服务
mocker ./api.js

# Run server at localhost:8000
mocker ./api.js --host localhost --port 8000

安装

您可以将其 package.json 配置作为当前项目依赖项。

npm install mocker-api --save-dev

使用

mocker-api 支持模拟,在 mocker / index.js 中配置。

您可以修改 http-proxy 选项并通过添加 httpProxy 配置来添加事件监听器

const proxy = {
  // 优先处理。
  // apiMocker(app, path, option)
  // 这是 apiMocker 的选项参数设置 `option`
  _proxy: {
    proxy: {
      // 将路径字符串(例如`/user/:name`)转换为正则表达式。
      // 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/'
    },
    // 重写目标网址路径。对象键将用作RegEx来匹配路径。
    // https://github.com/jaywcjlove/mocker-api/issues/62
    pathRewrite: {
      '^/api/repos/': '/repos/',
    },
    changeHost: true,
    // 修改 http-proxy 选项
    httpProxy: {
      options: {
        ignorePath: true,
      },
      listeners: {
        proxyReq: function (proxyReq, req, res, options) {
          console.log('proxyReq');
        },
      },
    },    
  },
  // =====================
  // 默认的 GET 请求。
  // 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;

参数设置

⚠️ No wildcard asterisk * - use parameters instead (.*), support v1.7.3+

⚠️ No wildcard asterisk (.*) - use parameters instead *path, support v3.0.0+

⚠️ 使用 path-to-regexp@8+ 时,请避免使用 /*(.*),统一使用命名通配参数,例如 /*path

延迟响应

您可以使用功能性工具来增强模拟效果。#17

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

apiMocker(app, mockerFilePath[, options])
apiMocker(app, Mocker[, options])

多个模拟文件监听

const apiMocker = require('mocker-api');
const mockerFile = ['./mock/index.js'];
// or
// const mockerFile = './mock/index.js';
apiMocker(app, mockerFile, options)

实例

在命令行中使用

Base example

⚠️ Not dependent on webpack and webpack-dev-server.

# 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.

{
  "name": "base-example",
  "scripts": {
+    "api": "mocker ./mocker"
  },
  "devDependencies": {
+    "mocker-api": "2.9.5"
  },
  "license": "MIT"
}

Express 中使用

Express example

⚠️ Not dependent on webpack and webpack-dev-server.

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

const express = require('express');
+ const apiMocker = require('mocker-api');

const app = express();

+ apiMocker(app, {
+   'GET /api/user': {
+     id: 1,
+     sex: 0
+   }
+ });

app.listen(8080);

Webpack 中使用

webpack example

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.

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

{
  "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.

{
  before(app){
+   apiMocker(app, path.resolve('./mocker/index.js'), {
+     proxy: {
+       '/repos/*path': 'https://api.github.com/',
+     },
+     changeHost: true,
+   })
  }
}

在 create-react-app 中使用

create-react-app example

创建 src/setupProxy.js 并放置以下内容:

+ 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,
+  });
};
{
  .....
  "devDependencies": {
+    "mocker-api": "2.9.5"
  },
  ....
}

开发

$ yarn install
$ yarn run build
$ yarn run watch
$ yarn run test

Contributors

As always, thanks to our amazing contributors!

Made with github-action-contributors.

License

MIT © Kenny Wong