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 相关文章推荐
javascript开发技术大全-第1章javascript概述
Jul 03 Javascript
javascript中数组的冒泡排序使用示例
Dec 18 Javascript
js计算德州扑克牌面值的方法
Mar 04 Javascript
谈谈Jquery ajax中success和complete有哪些不同点
Nov 20 Javascript
javascript汉字拼音互转的简单实例
Oct 09 Javascript
JS实现浏览器打印、打印预览示例
Feb 28 Javascript
强大的 Angular 表单验证功能详细介绍
May 23 Javascript
vue多种弹框的弹出形式的示例代码
Sep 18 Javascript
微信小程序实现折叠面板
Jan 31 Javascript
详解Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on
Oct 12 Javascript
微信小程序getLocation 需要在app.json中声明permission字段
Mar 03 Javascript
基于JavaScript实现十五拼图代码实例
Apr 26 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
DW中链接mysql数据库时,建立字符集中文出现乱码的解决方法
2010/03/27 PHP
PHP解码unicode编码的中文字符代码分享
2014/08/13 PHP
PHP向浏览器输出内容的4个函数总结
2014/11/17 PHP
Thinkphp5 自定义上传文件名的实现方法
2019/07/23 PHP
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
javascript中万恶的function实例分析
2011/05/25 Javascript
jQuery UI 实现email输入提示实例
2013/08/15 Javascript
jquery阻止冒泡事件使用模拟事件
2013/09/06 Javascript
jQuery.prop() 使用详解
2015/07/19 Javascript
AngularJS入门教程之AngularJS表达式
2016/04/18 Javascript
jQuery悬停文字提示框插件jquery.tooltipster.js用法示例【附demo源码下载】
2016/07/19 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
解决使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js问题
2018/08/30 Javascript
jQuery实现的模仿雨滴下落动画效果
2018/12/11 jQuery
浅谈es6中的元编程
2020/12/01 Javascript
JS removeAttribute()方法实现删除元素的某个属性
2021/01/11 Javascript
[48:29]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS KG
2018/03/31 DOTA
在Django的session中使用User对象的方法
2015/07/23 Python
使用Python实现Wake On Lan远程开机功能
2020/01/22 Python
Python接口测试环境搭建过程详解
2020/06/29 Python
5 分钟读懂Python 中的 Hook 钩子函数
2020/12/09 Python
Opencv 图片的OCR识别的实战示例
2021/03/02 Python
松本清官方海外旗舰店:日本最大的药妆连锁店
2017/11/21 全球购物
李维斯法国官网:Levi’s法国
2019/07/13 全球购物
环境科学专业个人求职的自我评价
2013/11/28 职场文书
电子技术专业中专生的自我评价
2013/12/17 职场文书
心得体会范文
2014/01/04 职场文书
人民调解员先进事迹材料
2014/05/08 职场文书
高一课前三分钟演讲稿
2014/09/13 职场文书
党员学习新党章思想汇报
2014/10/25 职场文书
电子商务实训报告总结
2014/11/05 职场文书
工程安全生产协议书
2014/11/21 职场文书
计划生育目标责任书
2015/05/09 职场文书
使用nginx配置访问wgcloud的方法
2021/06/26 Servers
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA
Win11电源已接通但未充电怎么办?Win11电源已接通未充电的解决方法
2022/04/05 数码科技