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(一)--- Node.js简介及安装开发环境
May 20 NodeJs
14款NodeJS Web框架推荐
Jul 11 NodeJs
nodejs导出excel的方法
Jun 30 NodeJs
nodejs爬虫抓取数据乱码问题总结
Jul 03 NodeJs
详解Nodejs的timers模块
Dec 22 NodeJs
基于Nodejs利用socket.io实现多人聊天室
Feb 22 NodeJs
nodejs连接mysql数据库简单封装示例-mysql模块
Apr 10 NodeJs
nodejs6下使用koa2框架实例
May 18 NodeJs
深入学习nodejs中的async模块的使用方法
Jul 12 NodeJs
nodejs多版本管理总结
Apr 03 NodeJs
Nodejs实现爬虫抓取数据实例解析
Jul 05 NodeJs
NodeJs实现简单的爬虫功能案例分析
Dec 05 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
PHP 验证码的实现代码
2011/07/17 PHP
php处理带有中文URL的方法
2016/07/11 PHP
在 Laravel 中动态隐藏 API 字段的方法
2019/10/25 PHP
锋利的jQuery 第三章章节总结的例子
2010/03/23 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
JQuery中两个ul标签的li互相移动实现方法
2015/05/18 Javascript
JavaScript通过代码调用Flash显示的方法
2016/02/02 Javascript
很酷的星级评分系统原生JS实现
2016/08/25 Javascript
JavaScript中apply方法的应用技巧小结
2016/09/29 Javascript
Nodejs中Express 常用中间件 body-parser 实现解析
2017/05/22 NodeJs
JavaScript原型继承_动力节点Java学院整理
2017/06/30 Javascript
你可能不知道的前端算法之文字避让(inMap)
2018/01/12 Javascript
使用node打造自己的命令行工具方法教程
2018/03/26 Javascript
[01:04:01]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS DT第一场
2014/05/24 DOTA
树莓派用python中的OpenCV输出USB摄像头画面
2019/06/22 Python
python中的列表与元组的使用
2019/08/08 Python
pytorch 实现tensor与numpy数组转换
2019/12/27 Python
Python多重继承之菱形继承的实例详解
2020/02/12 Python
tensorflow之tf.record实现存浮点数数组
2020/02/17 Python
Python numpy大矩阵运算内存不足如何解决
2020/11/19 Python
用HTML5制作烟火效果的教程
2015/05/12 HTML / CSS
Java的基础面试题附答案
2016/01/10 面试题
C#实现对任一张表的数据进行增,删,改,查要求,运用Webservice,体现出三层架构
2014/07/11 面试题
什么是封装
2013/03/26 面试题
门卫工作岗位职责
2013/12/17 职场文书
建筑工程专业学生的自我评价
2013/12/25 职场文书
婚礼主持词开场白
2014/03/13 职场文书
明信片寄语大全
2014/04/08 职场文书
韩语专业职业生涯规划范文:成功之路就在我们脚下
2014/09/11 职场文书
2014年党员个人剖析材料
2014/10/08 职场文书
报案材料怎么写
2015/05/25 职场文书
优秀新员工事迹材料
2019/05/13 职场文书
爱心捐款倡议书:点燃希望,传递温暖
2019/11/04 职场文书
教你利用python实现企业微信发送消息
2021/05/23 Python
JavaScript严格模式不支持八进制的问题讲解
2021/11/07 Javascript
php修改word的实例方法
2021/11/17 PHP