5分钟教你用nodeJS手写一个mock数据服务器

徐小夕 等级 1008 0 0

5分钟教你用nodeJS手写一个mock数据服务器

对于前端开发者而言,javascript正扮演着越来越重要的地位,它不仅能为浏览器端赋能,在web服务器方面也有很大的价值(我们可以用nodeJS来写服务端代码,启动web服务器),因此本文所要描述的,便是javascript在服务端的应用。我将介绍如何使用nodeJS来搭建一个mock服务器,方便前端自定义mock数据请求,提高前端开发着的主观能动性和对项目健壮性的探索。

我们将学到

  • koa基本使用
  • koa-router的基本用法
  • koa-logger的使用
  • glob支持文件遍历查寻
  • node几个核心api的使用
  • 使用nodemon做自动重启

mock服务器基本设计思路

通过目录路径和服务端api的映射关系来实现我们的api访问,比如我们访问接口/api/article/122,我们只需要在mock服务期目录的api的article目录下,创建122.json文件即可,json文件的数据可以自定义,方便前端调试。

5分钟教你用nodeJS手写一个mock数据服务器

具体实现

1.搭建一个node服务

const Koa = require('koa');
const app = new Koa();
app.listen(3000)

2.注册路由 我们使用koa-router来实现后台服务的路由功能,并通过koa提供的上下文ctx将读取到的数据返回给前端:

const Koa = require('koa');
const Router = require('koa-router');

const app = new Koa();
const router = new Router({prefix: '/api'});

router.get('/name', (ctx, next) => {
    ctx.body = {
        name: 'xuxiaoxi'
    }
  });

app
  .use(router.routes())
  .use(router.allowedMethods());

app.listen(3000)

这样我们就能实现一个勉强能用的基本的后台api服务器了,当我们请求/api/name时,会返回相应的数据给前台,这一步是我们实现mock服务的关键一步,接下来我们具体来实现目录的遍历和api的自动注册。

3.自动注册api接口并返回数据 我们将在这个阶段实现api服务的自动注册,这里我们使用glob这个第三方模块来遍历目录,并通过node的fs模块读取api文件的数据并返回给前台。glob的使用很简单,感兴趣的朋友可以自行学习,这里就不做过多介绍了。具体实现如下:

const Koa = require('koa');
const Router = require('koa-router');
const glob = require("glob");
const { resolve } = require('path');
const fs = require('fs');

const app = new Koa();
const router = new Router({prefix: '/api'});

// 注册路由
glob.sync(resolve('./api', "**/*.json")).forEach((item, i) => {
    let apiJsonPath = item && item.split('/api')[1];
    let apiPath = apiJsonPath.replace('.json', '');

    router.get(apiPath, (ctx, next) => {
        try {
            let jsonStr = fs.readFileSync(item).toString();
            ctx.body = {
                data: JSON.parse(jsonStr),
                state: 200,
                type: 'success' // 自定义响应体
            }
        }catch(err) {
            ctx.throw('服务器错误', 500);
        }
      });
});

app
  .use(router.routes())
  .use(router.allowedMethods());

app.listen(3000);
  1. 添加控制台日志 我们使用koa-logger实现在终端打印node日志,方便调试,虽然这不是该文章的重点,但是对于想做node开发的前端从业者,还是很有必要了解的。

    const logger = require('koa-logger')
    app.use(logger());

    这样,我们每个请求都会在终端打印出来。

  2. 路由映射文件的生成 该功能也不是本文的重点,但是会极大的方便前端开发者调试请求,因为如果api路径很长,我们需要一个个查找,但是有了这个map文件,我们只需要拷贝自动生成的路径即可。具体实现如下:

    //...
    const routerMap = {};  // 存放路由映射
    

// 注册路由 glob.sync(resolve('./api', "*/.json")).forEach((item, i) => { // ...

// 记录路由
routerMap[apiJsonPath] = apiPath;

});

fs.writeFile('./routerMap.json', JSON.stringify(routerMap, null , 4), err => { if(!err) { console.log('路由地图生成成功!') } });


### 基本目录结构

![](https://img-hello-world.oss-cn-beijing.aliyuncs.com/imgs/c6dc64f16e1526f8c74486a3a3ef7125.png)

### 完整代码
clone地址     [github地址](https://github.com/MrXujiang/openCoder/tree/master/mockServer)

欢迎大家相互学习交流,一起探索前端的边界。


### 更多推荐
* [笛卡尔乘积的javascript版实现和应用](https://juejin.im/post/6844903928577048583)
* [JavaScript 中的二叉树以及二叉搜索树的实现及应用](https://juejin.im/post/6844903906166718471)
* [用 JavaScript 和 C3 实现一个转盘小游戏](https://juejin.im/post/6844903895668375566)
* [教你用200行代码写一个爱豆拼拼乐H5小游戏(附源码)](https://juejin.im/post/6844903893961293831)
* [基于react/vue生态的前端集成解决方案探索与总结](https://juejin.im/post/6844903891893485576)
* [9012教你如何使用gulp4开发项目脚手架](https://juejin.im/post/6844903882124967949)
* [如何用不到200行代码写一款属于自己的js类库)](https://juejin.im/post/6844903880707293198)
* [让你瞬间提高工作效率的常用js函数汇总(持续更新)](https://juejin.im/post/6844903878362660878)
* [一张图教你快速玩转vue-cli3](https://juejin.im/post/6844903877133729799)
* [3分钟教你用原生js实现具有进度监听的文件上传预览组件](https://juejin.im/post/6844903875632168968)
* [3分钟教你用原生js实现具有进度监听的文件上传预览组件](https://juejin.im/post/6844903875632168968)
* [使用Angular8和百度地图api开发《旅游清单》](https://juejin.im/post/6844903873212055560)
* [js基本搜索算法实现与170万条数据下的性能测试](https://juejin.im/post/6844903866610221064)
* [《前端算法系列》如何让前端代码速度提高60倍](https://juejin.im/post/6844903865553256461)
* [《前端算法系列》数组去重](https://juejin.im/post/6844903863674208269)
*   [vue高级进阶系列——用typescript玩转vue和vuex](https://juejin.im/post/6844903831956897806)
* [前端三年,谈谈最值得读的5本书籍](https://juejin.im/post/6844903824788815879)
收藏
评论区

相关推荐

5分钟教你用nodeJS手写一个mock数据服务器
对于前端开发者而言,javascript正扮演着越来越重要的地位,它不仅能为浏览器端赋能,在web服务器方面也有很大的价值(我们可以用nodeJS来写服务端代码
mock 请求分发
首发于 <a name"vqeCn"</a 背景是这样的我们公司的后管项目走的不是 resful 风格的 api,而是走后管网关,后管网关会将请求进行分发,具体怎么分发,有这么以下几点: 请求全部走 POST 请求 URL 统一为 /agrs 数据提交方式为 application/json 数据格式大致分为: 系统报文头
Java单元测试神器之Mockito
**什么是 Mock 测试 ?** ----------------- Mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。什么是不容易构造的对象呢?例如HttpServletRequest,需要在有servlet容器环境中创建获取。那不容易获取的对象呢?如一个JedisCluster,需要准备r
Eolinker SaaS 7.1 版本更新:全面强化内置函数,加入API版本管理、优化体验等
**EOLINKER SaaS产品已于近期发布 7.1 版本,以下是部分核心改进内容:** **【API研发管理】产品更新说明:** 1. 预处理内置变量变更; 2. 预处理加入大量内置函数,支持AES、DES、SHA1、SHA256等函数等; 3. 父子级选项的勾选状态加入联动关系,当取消父级勾选框时自动取消子级勾选; 4. Mock API
Mockito 简明教程
原文同步至 [http://waylau.com/mockito-quick-start/](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fwaylau.com%2Fmockito-quick-start%2F) Mock 测试是单元测试的重要方法之一。本文介绍了基于 Java 语言的 M
Mockito框架入门教程(一)
官网: http://mockito.org API文档:http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html 项目源码:https://github.com/mockito/mockito 在做单元测试的时候,有的时候用到的一些类,我们构造起来不是那么容易,比如HttpReque
Mockito模拟进行单元测试
### 1.1 Mockito是什么?     MOCK意思是模拟的意思,主要被用来进行数据的人工组织,不会真正地调用第三方服务器,类似redis,mysql等都不会调用,也不用关心数据底层是如何进行处理的,我们要做的只是将本单元的逻辑进行单元测试,验证数据的逻辑处理性,而其中mock较好的框架就是Mockito。     Mockito是mocking
Mock方法介绍
**1 现有的单元测试框架** 单元测试是保证程序正确性的一种有效的测试手段,对于不同的开发语言,通常都能找到相应的单元框架。 [![](http://img1.51cto.com/attachment/201112/191839171.jpg)](https://www.oschina.net/action/GoToLink?url=http%3A%
Mock测试学习
Mock 测试就是在测试过程中,对于某些不容易构造(如 HttpServletRequest 必须在Servlet 容器中才能构造出来)或者不容易获取的比较复杂的对象(如 JDBC 中的ResultSet 对象),用一个虚拟的对象(Mock 对象)来创建以便测试的测试方法。 比如说你需要调用C服务,可是C服务还没有开发完成,那么你就可以将调用C服务的那部
NodeJs在windows上安装配置测试
Node.js简介 简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm,是全球最大的开源库生态系统。 安装环境 本机系统:Windo
PowerMock单元测试
      在[Java](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Flib.csdn.net%2Fbase%2Fjavaee)程序的单元测试中常用的mock工具有Mockito和EasyMock。但是这两种mock工具都无法实现对静态、final、私有方法或类的mock。因此有了功能强
聊聊开发日常的效率提升工具(全)
前言:日常开发中,好的工具往往能让我们事半功倍,有句老话说得好:工欲善其事,必先利其器。使用高效率的工具可以极大提升我们的开发效率。接下来分享下树酱平时开发中经常使用的一些效率工具 1 📁本地化工具篇 1.1 Apifox 官方介绍: API 文档、调试、Mock、测试一体化协作平台。Apifox Postman + Swagger + Mock + JM
聊聊前后端接口对接的那些事
前言在现在的前后端分离的项目开发中,为了不影响项目的进度,都是前后端同时进行开发。为了不影响咱们前端开发的进度,通常都是由后端同学,先提供接口文档,然后前端同学对照这接口文档来进行数据的模拟来完成前后端对接的工作。这里的数据模拟其实也就是大家平时所说的mock数据,那么前端当中有哪些方式来实现mock数据呢???…(⊙_⊙;)…咱们接着往下聊!(●^o^●)
美哭了,一款开发者必备的接口管理工具!
作为软件开发从业者,API 调试是必不可少的一项技能,在这方面 Postman 做的非常出色。但是在整个软件开发过程中,API 调试只是其中的一部分,还有很多事情 Postman 无法完成,或者无法高效完成,比如:API 文档定义、API Mock、API 自动化测试等等。Apifox 就是为了解决这个问题而生的。 接口管理现状 一、常用解决方案1. 使用
为什么越来越多的开发者放弃使用Postman,而选择Apifox
一、API调试常用解决方案 1、Postman + Swagger + Mock + JMeter作为一个后端开发,我做的大部分项目一般都是基于 Swagger 来管理 API 文档,基于 Postman 来做接口调试,基于 JMeter 来做接口性能测试,基于 RAP 等工具 Mock API 数据。\ 2、存在的问题(1)多系统数据不互通API设计者、前