基于koa搭建一个属于自己的mock服务器

1.初衷的由来。

mock可以让你在没有后端程序的情况下能真实地在线模拟 ajax 请求,实现前后端分离。大大提高前端开发的效率。目前线上有免费提供mock的平台https://www.fastmock.site/#/,但是在真实的项目开发中,涉及的敏感数据就不太方便在该平台上使用了。

那怎么办吧?阿里开源的前端框架umi,线上地址https://umijs.org/zh-CN就集成了mock的能力,个人觉得在使用的时候。项目本身就很大,加上大量的mock集成看起来很冗余。为此想着搞上一个属于自己的mock服务器。简单易上手。

2.项目的完整demo,下载就可以使用的那种。

https://github.com/wangchun123/myLocalMock

3.项目的目录结构

4.让我进入代码的讲解中

1.我们整一个文件夹叫myLocalMock。npm init --yes

2.现在可以装依赖了,对应的依赖含义可以自行在https://www.npmjs.com/官网上查下对应的用法。cnpm i @koa/cors  glob  koa  koa-logger  koa-router --save

3.还要下载一个依赖,cnpm i -g nodemon 我们在启动服务的时候要用到nodemon。先装上。

4.我们把项目目录结构完善下,按照上图的目录结构来就行。api文件、config文件、app.js必须有,其他的是辅助项目上传的可以不需要。

5.在api文件下建立v1和v2文件。v1和v2分别建立one.json和two.json内容自由发挥就很好,只要是json格式。

6.关键的config的文件,建立mockConfig.js代码如下。如果防止敲代码出错,直接复制也行。

const mock = (config, prefix = "api") => {
  const Koa = require("koa");
  const Router = require("koa-router");
  const glob = require("glob");
  const fs = require("fs");
  const logger = require("koa-logger");
  const cors = require("@koa/cors");
  const { resolve } = require("path");

  const app = new Koa();
  const router = new Router({ prefix: `/${prefix}` });

  /***
   * @url 请求的路径
   * @method  请求的方式
   * @defaultJson 默认显示的json数据
   * @callback 回调函数目的是,动态处理不同条件展示的json数据
   */
  const mockConfig = (url, method, defaultJson, callback) => {
    glob.sync(resolve(`./${prefix}`, `${url}.json`)).forEach((item, i) => {
      let apiJsonPath = item && item.split(`/${prefix}`)[1];
      let apiPath = apiJsonPath.replace(".json", "");
      router[method || "get"](apiPath, (ctx, next) => {
        try {
          let finallJson = callback && callback(ctx);
          let changeFileUrl =
            finallJson && item && item.replace(defaultJson, finallJson);
          let jsonStr = fs.readFileSync(changeFileUrl || item).toString();
          ctx.body = {
            data: JSON.parse(jsonStr),
            state: 200,
            type: "success",
          };
        } catch (err) {
          ctx.throw("服务器错误", 500);
        }
      });
    });
  };

  // 注册路由
  config.forEach((item) => {
    mockConfig(item.url, item.method, item.defaultJson, item.callback);
  });

  app
    .use(cors())
    .use(router.routes())
    .use(router.allowedMethods())
    .use(logger());
  app.listen(3000);
};

module.exports = {
  mock,
};

7.来到app.js文件中代码如下。如果防止敲代码出错,直接复制也行。

const { mock } = require("./config/mockConfig");

mock([
  {
    url: "v1/one",
    method: "get",
    defaultJson: "one.json",
    callback: (ctx) => {
      const query = ctx.query;
      if (query.age == 2) {
        return "two.json";
      }
    },
  },
  {
    url: "v2/one",
    method: "post",
    defaultJson: "one.json",
    callback: (ctx) => {
      const query = ctx.query;
      if (query.name == "小米") {
        return "two.json";
      }
    },
  },
]);

8.我们已经准备就绪,在项目终端下输入:nodemon app.js  启动完毕直接访问就可以看到你准备的json数据了 127.0.0.1:3000/api/v1/one

5.最终的效果如下图

1.简单的get请求,post同理

 

2.带参数的get请求,post同理

6.温馨提示

1.具体使用注意事项可以访问,https://github.com/wangchun123/myLocalMock/blob/master/README.md

2.我们可以直接使用axios请求到数据,例如axios.get('/api/v1/one').then(res=>console.log(res))

3.我们在真实的开发项目中,调用接口会有跨域的问题,可以配置一下proxy,代码如下

proxy:{
    '/api':{
        target:'http://127.0.0.1:3000/',
        changeOrigin:true,
    }
}

这样后端真实的接口开发好了之后,我们只要把proxy->target指向后端提供的服务地址。前端几乎是不需要多大的改动。真正体现了mock的好处。

4.具备node.js的和express框架认知的同学,上手理解会非常快。koa就是在express基础上的完善和优化。没有此类技能的同学,仅仅使用此mock功能。也是没有影响的。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
好的,下面我来给你简单介绍一下搭建Koa服务器并实现注册功能的步骤。 1. 搭建Koa服务器 首先,你需要安装Node.js和npm包管理工具。然后,通过npm安装koakoa-router模块。 ``` npm install koa koa-router ``` 接着,创建一个koa应用。在项目根目录下创建一个app.js文件,输入以下代码: ``` const Koa = require('koa'); const Router = require('koa-router'); const app = new Koa(); const router = new Router(); router.get('/', async (ctx, next) => { ctx.body = 'Hello World'; }); app.use(router.routes()).use(router.allowedMethods()); app.listen(3000, () => { console.log('Server is running at http://localhost:3000'); }); ``` 上述代码创建了一个koa应用,在浏览器中访问http://localhost:3000,会显示“Hello World”。 2. 实现注册功能 接下来,我们来实现注册功能。首先,我们需要安装koa-bodyparser模块,这个模块可以将post请求的参数解析到ctx.request.body中。 ``` npm install koa-bodyparser ``` 在app.js文件中,引入koa-bodyparser模块,并添加一个post路由: ``` const Koa = require('koa'); const Router = require('koa-router'); const bodyParser = require('koa-bodyparser'); const app = new Koa(); const router = new Router(); router.get('/', async (ctx, next) => { ctx.body = 'Hello World'; }); router.post('/register', async (ctx, next) => { const { username, password } = ctx.request.body; // 这里可以将用户名和密码存储到数据库中 ctx.body = { code: 0, message: '注册成功' }; }); app.use(bodyParser()); app.use(router.routes()).use(router.allowedMethods()); app.listen(3000, () => { console.log('Server is running at http://localhost:3000'); }); ``` 上述代码添加了一个post路由,当访问http://localhost:3000/register时,会将post请求的参数解析到ctx.request.body中,并将用户名和密码存储到数据库中(这里省略了数据库操作),最后返回一个json数据表示注册成功。 好了,到这里为止,我们就成功地搭建了一个Koa服务器并实现了注册功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

见光就死123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值