express+mockjs实现模拟后台数据发送功能


Posted in Javascript onJanuary 07, 2018

前言:

大多数时候,前端会和后端同时进行开发,即在我们开发完页面的时候,很可能还不能立马进入联调阶段,这个时候,为了保证我们接口的有效性和代码的功能完整,我们可能需要模拟数据。

模拟数据方法

1.通过js变量模拟后台数据

优点:不需要服务器

缺点:需要造很多变量,同时还要将变量在我们的有效代码中使用,最后还得删除

2.通过ajax请求json文件

优点:只需要配置路径,就可以访问,进入联调阶段不用修改大量的js代码

缺点:ajax存在跨域问题,通常无法请求本地文件,即使火狐也存在不能访问不同文件目录下的json文件,通常需要通过ide或者自己手动启动服务

3.用nodejs自己写一个专门用来发送请求的服务,不包含业务逻辑

优点:前端的代码进入联调阶段只需要修改一个basePath,所有的接口名字都可以和约定好的路径保持一致,可以测试post请求,模拟网络环境

缺点:自己要写一个后台

1、2两种模拟数据的方式适合用来做demo,但是如果做得是上线项目,我们还是推荐使用自己搭建一个node后台

1.准备node环境、npm/cnpm

2.安装express、mockjs

express+mockjs实现模拟后台数据发送功能

3.创建服务端文件server.js,引入相关模块

let express = require('express'); //引入express模块
let Mock = require('mockjs');  //引入mock模块
let app = express();    //实例化express

4.配置接口路由,设置监听端口

/**
 * 配置test.action路由
 * @param {[type]} req [客户端发过来的请求所带数据]
 * @param {[type]} res [服务端的相应对象,可使用res.send返回数据,res.json返回json数据,res.down返回下载文件]
 */
app.all('/test.action', function(req, res) {
 res.send('hello world');
});
/**
 * 监听8090端口
 */
app.listen('8090');

此时我们直接访问http://localhost:8090/test.action,就可以直接在界面看到'hello world'文字

5.使用mockjs返回格式化json数据

app.all('/test.action', function(req, res) {
 /**
  * mockjs中属性名‘|'符号后面的属性为随机属性,数组对象后面的随机属性为随机数组数量,正则表达式表示随机规则,+1代表自增
  */
 res.json(Mock.mock({
  "status": 200,
  "data|1-9": [{
   "name|5-8": /[a-zA-Z]/,
   "id|+1": 1,
   "value|0-500": 20
  }]
 }));
});

此时我们再访问页面数据,我们就可以得到一份随机的json数据

6.创建模拟数据文件夹testData,创建模拟数据json文件(注意:json文件中不能使用正则,且对象属性必须为双引号字符串)

7.遍历模拟数据文件,生成对应路由

/*readdir读取目录下所有文件*/
fs.readdir('./testData', function(err, files) {
 if(err) {
  console.log(err);
 } else {
  /*成功读取文件,取得文件名,拼接生成对应action,监听对应接口并返回对应文件数据*/
  files.forEach(function(v, i) {
   app.all(`/${v.replace(/json/, 'action')}`, function(req, res) {
    fs.readFile(`./testData/${v}`, 'utf-8', function(err, data) {
     if(err) {
      console.log(err);
     } else {
      res.json(Mock.mock(JSON.parse(data)));
     }
    })
   })
  })
 }
})

至此,我们的node服务器已经搭建成功,使用node server.js运行服务器,我们就可以直接在前端访问接口,但是如果只是单纯的生成后台,前端页面不通过后台进行访问的话,存在跨域问题,如果需要解决,可以在后台添加跨域请求

/*为app添加中间件处理跨域请求*/
app.use(function(req, res, next) {
 res.header("Access-Control-Allow-Origin", "*");
 res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
 res.header("Access-Control-Allow-Headers", "X-Requested-With");
 res.header('Access-Control-Allow-Headers', 'Content-Type');
 next();
});

ps:如果mock需要使用正则,请单独配置路由进行处理,express和mockjs更多指令,请查阅官网api

总结

以上是小编给大家介绍的express+mockjs实现模拟后台数据发送功能,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
JS 容错处理代码, 屏蔽错误信息
Mar 09 Javascript
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
Mar 23 Javascript
基于JQuery实现滚动到页面底端时自动加载更多信息
Jan 31 Javascript
Web程序员必备的7个JavaScript函数
Jun 14 Javascript
AngularJS 依赖注入详解及示例代码
Aug 17 Javascript
浅谈javascript中的 “ && ” 和 “ || ”
Feb 02 Javascript
如何编写jquery插件
Mar 29 jQuery
Angular2搜索和重置按钮过场动画
May 24 Javascript
vue cli 3.0 使用全过程解析
Jun 14 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
Sep 15 Javascript
js打开word文档预览操作示例【不是下载】
May 23 Javascript
JavaScript静态作用域和动态作用域实例详解
Jun 17 Javascript
使用mock.js随机数据和使用express输出json接口的实现方法
Jan 07 #Javascript
使用 Node.js 开发资讯爬虫流程
Jan 07 #Javascript
CentOS环境中MySQL修改root密码方法
Jan 07 #Javascript
12条写出高质量JS代码的方法
Jan 07 #Javascript
js数组方法reduce经典用法代码分享
Jan 07 #Javascript
javascript中的replace函数(带注释demo)
Jan 07 #Javascript
基于JavaScript实现简单的音频播放功能
Jan 07 #Javascript
You might like
php笔记之:AOP的应用
2013/04/24 PHP
深入探讨:Nginx 502 Bad Gateway错误的解决方法
2013/06/03 PHP
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
2014/01/03 PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
2018/04/09 PHP
PHP实现将base64编码字符串转换成图片示例
2018/06/22 PHP
JavaScript 自动完成脚本整理(33个)
2009/10/20 Javascript
jQuery MD5加密实现代码
2010/03/15 Javascript
JS函数验证总结(方便js客户端输入验证)
2010/10/29 Javascript
javascript常见数字进制转换实例分析
2016/04/21 Javascript
JS实现的自定义显示加载等待图片插件(loading.gif)
2016/06/17 Javascript
JS实现点击网页判断是否安装app并打开否则跳转app store
2016/11/18 Javascript
基于Vue实现timepicker
2017/04/25 Javascript
JavaScript标准对象_动力节点Java学院整理
2017/06/27 Javascript
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
浅谈NodeJs之数据库异常处理
2017/10/25 NodeJs
JSX在render函数中的应用详解
2019/09/04 Javascript
JS实现动态星空背景效果
2019/11/01 Javascript
JavaScript 浏览器对象模型BOM原理与常见用法实例分析
2019/12/16 Javascript
vue pages 多入口项目 + chainWebpack 全局引用缩写说明
2020/09/21 Javascript
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
对python中if语句的真假判断实例详解
2019/02/18 Python
python中的Elasticsearch操作汇总
2019/10/30 Python
Python网络编程之使用TCP方式传输文件操作示例
2019/11/01 Python
Keras 快速解决OOM超内存的问题
2020/06/11 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
详解Python openpyxl库的基本应用
2021/02/26 Python
localstorage和sessionstorage使用记录(推荐)
2017/05/23 HTML / CSS
中国综合网上购物商城:苏宁易购
2016/08/09 全球购物
乌克兰电子和家用电器商店:Foxtrot
2019/07/23 全球购物
Ref与out有什么不同
2012/11/24 面试题
秋游活动策划方案
2014/02/16 职场文书
财产公证书
2014/04/10 职场文书
监察建议书
2015/02/04 职场文书
2015年环卫工作总结
2015/04/28 职场文书
创业计划书之健康营养产业
2019/10/15 职场文书
七年级作文之环保作文
2019/10/17 职场文书