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


Posted in NodeJs onSeptember 10, 2019

对于前端开发者而言,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);

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

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

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

路由映射文件的生成 该功能也不是本文的重点,但是会极大的方便前端开发者调试请求,因为如果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('路由地图生成成功!')
  }
});

基本目录结构

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

完整代码

clone地址  github地址 

https://github.com/MrXujiang/openCoder/tree/master/mockServer

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
NodeJS 模块开发及发布详解分享
Mar 07 NodeJs
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
Nov 18 NodeJs
NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法
Jul 26 NodeJs
Nodejs下用submit提交表单提示cannot post错误的解决方法
Nov 21 NodeJs
详解nodeJS之二进制buffer对象
Jun 03 NodeJs
nodejs+express搭建多人聊天室步骤
Feb 12 NodeJs
Nodejs异步回调之异常处理实例分析
Jun 22 NodeJs
详解webpack打包nodejs项目(前端代码)
Sep 19 NodeJs
nodejs 使用nodejs-websocket模块实现点对点实时通讯
Nov 28 NodeJs
nodejs实现用户登录路由功能
May 22 NodeJs
nodejs的安装使用与npm的介绍
Sep 11 NodeJs
分享五个Node.js开发的优秀实践 
Apr 07 NodeJs
NodeJS 文件夹拷贝以及删除功能
Sep 03 #NodeJs
纯异步nodejs文件夹(目录)复制功能
Sep 03 #NodeJs
nodejs文件夹深层复制功能
Sep 03 #NodeJs
Nodejs中使用puppeteer控制浏览器中视频播放功能
Aug 26 #NodeJs
nodejs简单抓包工具使用详解
Aug 23 #NodeJs
nodejs使用node-xlsx生成excel的方法示例
Aug 22 #NodeJs
Nodejs libuv运行原理详解
Aug 21 #NodeJs
You might like
不用数据库的多用户文件自由上传投票系统(2)
2006/10/09 PHP
用php+mysql一个名片库程序
2006/10/09 PHP
使用php测试硬盘写入速度示例
2014/01/27 PHP
php程序内部post数据的方法
2015/03/31 PHP
PHP容器类的两种实现方式示例
2019/07/24 PHP
Laravel 创建指定表 migrate的例子
2019/10/09 PHP
PJBlog插件 防刷新的在线播放器
2006/10/25 Javascript
User Scripts: Video Download by User Scripts
2007/05/14 Javascript
js动画(animate)简单引擎代码示例
2012/12/04 Javascript
JavaScript获取flash对象与网上的有所不同
2014/04/21 Javascript
jquery阻止后续事件只执行第一个事件
2014/07/24 Javascript
JsRender实用入门教程
2014/10/31 Javascript
js实现下拉框选择要显示图片的方法
2015/02/16 Javascript
JavaScript String 对象常用方法详解
2016/05/13 Javascript
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
Node.js获取前端ajax提交的request信息
2017/02/20 Javascript
基于Vue.js 2.0实现百度搜索框效果
2020/12/28 Javascript
JavaScript new对象的四个过程实例浅析
2018/07/31 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
2018/09/16 Javascript
详解vue-router的Import异步加载模块问题的解决方案
2020/05/13 Javascript
[03:52]DOTA2英雄基础教程 酒仙
2013/12/23 DOTA
用Python实现一个简单的能够上传下载的HTTP服务器
2015/05/05 Python
Python自定义主从分布式架构实例分析
2016/09/19 Python
Python从使用线程到使用async/await的深入讲解
2018/09/16 Python
python 获取页面表格数据存放到csv中的方法
2018/12/26 Python
pycharm软件实现设置自动保存操作
2020/06/08 Python
python下载的库包存放路径
2020/07/27 Python
基于html5 DeviceOrientation 实现微信摇一摇功能
2015/09/25 HTML / CSS
英国最大的天然和有机产品在线零售商之一:Big Green Smile
2020/05/06 全球购物
建筑工程专业学生的自我评价
2013/12/25 职场文书
八一建军节部队活动方案
2014/02/04 职场文书
2015年幼儿园毕业感言
2014/02/12 职场文书
文体活动实施方案
2014/03/27 职场文书
Django中的JWT身份验证的实现
2021/05/07 Python
python数字图像处理之对比度与亮度调整示例
2022/06/28 Python
Win10服务主机占用内存怎么办?Win10服务主机进程占用大量内存解决方法
2022/09/23 数码科技