{"id":155444,"date":"2020-08-31T22:51:53","date_gmt":"2020-08-31T14:51:53","guid":{"rendered":"http:\/\/4563.org\/?p=155444"},"modified":"2020-08-31T22:51:53","modified_gmt":"2020-08-31T14:51:53","slug":"%e4%b8%80%e4%b8%aa%e4%b8%8d%e9%9c%80%e8%a6%81%e5%86%99%e4%bb%a3%e7%a0%81-%e7%9a%84-mock-%e4%bb%a3%e7%90%86-%e5%b7%a5%e5%85%b7","status":"publish","type":"post","link":"http:\/\/4563.org\/?p=155444","title":{"rendered":"\u4e00\u4e2a\u201c\u4e0d\u9700\u8981\u201d\u5199\u4ee3\u7801 \u7684 mock &amp; \u4ee3\u7406 \u5de5\u5177"},"content":{"rendered":"<div>\n<div>\n<div>\n<h1>                  \u4e00\u4e2a\u201c\u4e0d\u9700\u8981\u201d\u5199\u4ee3\u7801 \u7684 mock &amp; \u4ee3\u7406 \u5de5\u5177               <\/h1>\n<p> <\/p>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : ruoxie <\/span>  <span><i><\/i> 5<\/span> <\/div>\n<div> <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div isfirst=\"1\"> <\/p>\n<p><img decoding=\"async\" src=\"http:\/\/4563.org\/wp-content\/uploads\/2020\/09\/20200917_5f6355a39b983.gif\" alt=\"\u4e00\u4e2a\u201c\u4e0d\u9700\u8981\u201d\u5199\u4ee3\u7801 \u7684 mock &amp;amp; \u4ee3\u7406 \u5de5\u5177\" \/><\/p>\n<p><img decoding=\"async\" src=\"http:\/\/4563.org\/wp-content\/uploads\/2020\/09\/20200917_5f6355a697ee2.gif\" alt=\"\u4e00\u4e2a\u201c\u4e0d\u9700\u8981\u201d\u5199\u4ee3\u7801 \u7684 mock &amp;amp; \u4ee3\u7406 \u5de5\u5177\" \/><\/p>\n<h3>install<\/h3>\n<p>yarn create @lowcoding\/mock<\/p>\n<h3>start<\/h3>\n<p><code>yarn start<\/code><\/p>\n<p>mock server \u9ed8\u8ba4\u5728\u672c\u5730 3000 \u7aef\u53e3\u542f\u52a8\uff0c\u8bbf\u95ee http:\/\/localhost:3000\/ \u5373\u53ef\u3002<\/p>\n<blockquote>\n<p><code>lowcode-mock<\/code> \u9ed8\u8ba4\u652f\u6301\u8de8\u57df\uff0c\u524d\u7aef\u9879\u76ee\u4e2d\u53ef\u4e0d\u5fc5\u518d\u914d\u7f6e\u4ee3\u7406\uff0c\u76f4\u63a5\u8bf7\u6c42 <code>lowcode-mock<\/code> \u8d77\u7684\u670d\u52a1\u5373\u53ef\u3002<\/p>\n<\/blockquote>\n<h3>mock<\/h3>\n<p>\u5728 <code>srcroutes<\/code> \u76ee\u5f55\u4e0b\u65b0\u5efa\u4e00\u4e2a js \u6587\u4ef6\uff0c\u5c06\u5982\u4e0b\u5185\u5bb9\u590d\u5236\u8fdb\u53bb\u4fdd\u5b58\u5373\u53ef\uff1a<\/p>\n<pre><code>import KoaRouter from 'koa-router' import proxy from '..\/middleware\/Proxy' import { delay } from '..\/lib\/util' let Mock = require('mockjs') let Random = Mock.Random  const router = new KoaRouter() router.get('\/your-mock-api', (ctx) =&gt; {  ctx.body = '\u4f60\u7684\u7b2c\u4e00\u4e2a mock \u63a5\u53e3' }) module.exports = router <\/code><\/pre>\n<p>\u4f7f\u7528 vscode \u63d2\u4ef6 yapi-code \uff0c\u53ef\u76f4\u63a5\u6839\u636e JSON \u6570\u636e\u6216\u8005 YAPI \u63a5\u53e3\u5b9a\u4e49\u81ea\u52a8\u751f\u6210 mock \u63a5\u53e3\u4ee5\u53ca mock \u6570\u636e\u3002<\/p>\n<h4>\u6839\u636e YAPI \u751f\u6210 mock<\/h4>\n<p>\u590d\u5236 YAPI \u4e0a\u63a5\u53e3 id\uff0c\u6bd4\u5982 <code>https:\/\/\u4f60\u7684 yapi \u5730\u5740 \/project\/869\/interface\/api\/14037<\/code> \u6700\u540e\u9762\u7684\u6570\u5b57\u90e8\u5206<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/4563.org\/wp-content\/uploads\/2020\/09\/20200917_5f6355a7d6873.gif\" alt=\"\u4e00\u4e2a\u201c\u4e0d\u9700\u8981\u201d\u5199\u4ee3\u7801 \u7684 mock &amp;amp; \u4ee3\u7406 \u5de5\u5177\" \/><\/p>\n<p>\u8bbf\u95ee\u521b\u5efa\u7684 mock \u63a5\u53e3\uff0c\u5373\u53ef\u62ff\u5230\u968f\u673a\u7684 mock \u6570\u636e\uff1a<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/4563.org\/wp-content\/uploads\/2020\/09\/20200917_5f6355a8003a7.png\" alt=\"\u4e00\u4e2a\u201c\u4e0d\u9700\u8981\u201d\u5199\u4ee3\u7801 \u7684 mock &amp;amp; \u4ee3\u7406 \u5de5\u5177\" \/><\/p>\n<h4>\u6839\u636e JSON \u751f\u6210 mock<\/h4>\n<p>\u590d\u5236 JSON \u6570\u636e\uff0c\u6bd4\u5982\uff1a<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/4563.org\/wp-content\/uploads\/2020\/09\/20200917_5f6355ac2cd43.gif\" alt=\"\u4e00\u4e2a\u201c\u4e0d\u9700\u8981\u201d\u5199\u4ee3\u7801 \u7684 mock &amp;amp; \u4ee3\u7406 \u5de5\u5177\" \/><\/p>\n<blockquote>\n<p>\u901a\u8fc7 JSON \u6570\u636e\u751f\u6210\u7684 mock \u63a5\u53e3\u9700\u8981\u624b\u52a8\u4fee\u6539\u8def\u7531\u5730\u5740\u3002<\/p>\n<\/blockquote>\n<h4>\u6839\u636e\u5b57\u6bb5\u7c7b\u578b\u6216\u5b57\u6bb5\u540d\u79f0\u751f\u6210\u7279\u5b9a\u7684 mock \u6570\u636e<\/h4>\n<p>\u914d\u7f6e <code>yapi-code<\/code>\uff1a<\/p>\n<p>\u914d\u5728 <code>package.json<\/code> \u4e2d\u5373\u53ef\u3002<\/p>\n<pre><code> \"yapi-code.mockKeyWordLike\": {   \"icon\": \"Random.image('48x48')\",   \"img\":\"Random.image('48x48')\",   \"image\":\"Random.image('48x48')\",   \"code\": \"200&amp;&amp;number\",   \"name\":\"'\u6a21\u7cca\u5339\u914d\u540e\u751f\u6210\u7684 mock'\"  },  \"yapi-code.mockKeyWordEqual\": {   \"message\": \"'\u8fd9\u662f\u4e00\u6761\u7cbe\u786e\u7684 mock'\",   \"total\": 200,  },  \"yapi-code.mockString\": \"Random.cword(5, 6)\",  \"yapi-code.mockBoolean\": \"Random.boolean()\",  \"yapi-code.mockNumber\": \"Random.natural(100,1000)\"  <\/code><\/pre>\n<p>\u6839\u636e json \u6570\u636e\uff1a<\/p>\n<pre><code>const json = {  code: 100,  message: '\u8bf7\u6c42\u6210\u529f',  result: {   list: [    {     code: '\u6ce8\u610f\u8fd9\u662f\u4e00\u4e2a\u5b57\u7b26\u4e32\u7684 code',     name: '\u5f20\u4e09',     icon: '',     actived: false,    },   ],   total: 0,  }, } <\/code><\/pre>\n<p>\u751f\u6210\u5982\u4e0b\u4ee3\u7801<\/p>\n<pre><code>.get(`xxxxx`, async (ctx, next) =&gt; {   const list1 = []   for (let i = 0; i &lt; 3; i++) {    list1.push({     code: Random.cword(5, 6),     name: '\u6a21\u7cca\u5339\u914d\u540e\u751f\u6210\u7684 mock',     icon: Random.image('48x48'),     actived: Random.boolean(),    })   }   ctx.body = {    code: 200,    message: '\u8fd9\u662f\u4e00\u6761\u7cbe\u786e\u7684 mock',    result: { list: list1, total: 200 },   }  }) <\/code><\/pre>\n<p>\u8bbf\u95ee mock \u63a5\u53e3\u5373\u53ef\u62ff\u5230\u5982\u4e0b\u7c7b\u4f3c\u6570\u636e\uff1a<\/p>\n<pre><code>{  \"code\": 200,  \"message\": \"\u8fd9\u662f\u4e00\u6761\u7cbe\u786e\u7684 mock\",  \"result\": {   \"list\": [    {     \"code\": \"\u516b\u522b\u56e0\u6559\u8005\u6d3b\",     \"name\": \"\u6a21\u7cca\u5339\u914d\u540e\u751f\u6210\u7684 mock\",     \"icon\": \"http:\/\/dummyimage.com\/48x48\",     \"actived\": true    },    {     \"code\": \"\u6bdb\u7740\u4f55\u5de5\u65f6\u767d\",     \"name\": \"\u6a21\u7cca\u5339\u914d\u540e\u751f\u6210\u7684 mock\",     \"icon\": \"http:\/\/dummyimage.com\/48x48\",     \"actived\": false    },    {     \"code\": \"\u53bf\u79f0\u53bf\u5355\u4e0b\u5916\",     \"name\": \"\u6a21\u7cca\u5339\u914d\u540e\u751f\u6210\u7684 mock\",     \"icon\": \"http:\/\/dummyimage.com\/48x48\",     \"actived\": true    }   ],   \"total\": 200  } } <\/code><\/pre>\n<h3>\u5ef6\u65f6<\/h3>\n<pre><code>import KoaRouter from 'koa-router' import proxy from '..\/middleware\/Proxy' import { delay } from '..\/lib\/util' let Mock = require('mockjs') let Random = Mock.Random  const router = new KoaRouter() router.get('\/delay', (ctx) =&gt; {  delay(3) \/\/ 3 \u79d2\u540e\u8fd4\u56de\u7ed3\u679c  ctx.body = 'delay' }) <\/code><\/pre>\n<blockquote>\n<p>\u53ef\u7528\u4e8e\u6d4b loading \u6548\u679c\u3002<\/p>\n<\/blockquote>\n<h3>http \u5f02\u5e38\u72b6\u6001\u7801<\/h3>\n<pre><code>router.get('\/httpError', (ctx) =&gt; {  ctx.status = 401  ctx.body = 'http 401' }) <\/code><\/pre>\n<h3>\u4ee3\u7406<\/h3>\n<pre><code>router.get('\/proxy', proxy('https:\/\/github.com\/wjkang\/lowcode-mock'), (ctx) =&gt; {  ctx.body = 'https:\/\/github.com\/wjkang\/lowcode-mock' }) <\/code><\/pre>\n<blockquote>\n<p>\u6765\u81ea <code>\/proxy<\/code> \u7684\u8bf7\u6c42\u8f6c\u53d1\u5230 <code>https:\/\/github.com\/wjkang\/lowcode-mock\/proxy<\/code> \uff0c\u7528\u4e8e\u540e\u7aef\u63a5\u53e3\u53ef\u8054\u8c03\u7684\u65f6\u5019\u8df3\u8fc7\u672c\u5730 mock\uff0c\u8f6c\u53d1\u8bf7\u6c42\u5230\u540e\u7aef\u63a5\u53e3\u3002<\/p>\n<\/blockquote>\n<pre><code>router.all(new RegExp('^\/lowcode\/mock\/(|^$)'), proxy('https:\/\/github.com\/wjkang\/lowcode-mock')) <\/code><\/pre>\n<blockquote>\n<p>\u4e0d\u9700\u8981 mock \u5e76\u4e14\u5339\u914d\u6b63\u5219\u7684\u63a5\u53e3\u76f4\u63a5\u8f6c\u53d1\u5230\u540e\u7aef\u5730\u5740\u3002<\/p>\n<\/blockquote><\/div>\n<div> <b>\u5927\u4f6c\u6709\u8a71\u8aaa<\/b> (<span>0<\/span>)        <\/div>\n<div> <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<ul>\n<li>\n","protected":false},"excerpt":{"rendered":"<p>\u4e00\u4e2a\u201c\u4e0d\u9700\u8981\u201d\u5199\u4ee3\u7801 \u7684 mock&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[],"tags":[],"_links":{"self":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts\/155444"}],"collection":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=155444"}],"version-history":[{"count":0,"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts\/155444\/revisions"}],"wp:attachment":[{"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=155444"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=155444"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=155444"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}