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简单实现让文本框内容逐个字的显示出来
Oct 22 Javascript
jquery中load方法的用法及注意事项说明
Feb 22 Javascript
javascript实现回到顶部特效
May 06 Javascript
javascript实现树形菜单的方法
Jul 17 Javascript
jQuery ajax分页插件实例代码
Jan 27 Javascript
js设置和获取自定义属性的方法
Oct 20 Javascript
JS操作xml对象转换为Json对象示例
Mar 25 Javascript
Vue插值、表达式、分隔符、指令知识小结
Oct 12 Javascript
微信二次分享报错invalid signature问题及解决方法
Apr 01 Javascript
vscode中eslint插件的配置(prettier配置无效)
Sep 10 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
Sep 16 Javascript
JavaScript实现随机点名器
Mar 25 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
Smarty+QUICKFORM小小演示
2007/02/25 PHP
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
php下通过IP获取地理位置的代码(小偷程序)
2011/06/09 PHP
检查用户名是否已在mysql中存在的php写法
2014/01/20 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
2016/11/17 PHP
JScript 脚本实现文件下载 一般用于下载木马
2009/10/29 Javascript
jQuery拖动div、移动div、弹出层实现原理及示例
2014/04/08 Javascript
浅谈JavaScript Array对象
2014/12/29 Javascript
jQuery实现简单的日期输入格式化控件
2015/03/12 Javascript
JavaScript检查数字是否为整数或浮点数的方法
2015/06/09 Javascript
使用jquery实现鼠标滑过弹出更多相关信息层附源码下载
2015/11/23 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
2016/01/14 Javascript
Bootstrap编写一个同时适用于PC、平板、手机的登陆页面
2016/06/30 Javascript
快速搭建React的环境步骤详解
2017/11/06 Javascript
ng-events类似ionic中Events的angular全局事件
2018/09/05 Javascript
详解搭建es6+devServer简单开发环境
2018/09/25 Javascript
webpack4实现不同的导出类型
2019/04/09 Javascript
微信小程序实现页面跳转传递参数(实体,对象)
2019/08/12 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
Vue跨域请求问题解决方案过程解析
2020/08/07 Javascript
jQuery实现鼠标拖动图片功能
2021/03/04 jQuery
[03:23]我的刀塔你不可能这么可爱 第一期金萌萌的故事
2014/06/20 DOTA
在cmd中运行.py文件: python的操作步骤
2018/05/12 Python
在Python中使用gRPC的方法示例
2018/08/08 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
python调用其他文件函数或类的示例
2019/07/16 Python
使用Keras画神经网络准确性图教程
2020/06/15 Python
python中pop()函数的语法与实例
2020/12/01 Python
CSS3实现王者荣耀匹配人员加载页面的方法
2019/04/16 HTML / CSS
师范生求职信
2014/06/14 职场文书
2014年药店店长工作总结
2014/11/17 职场文书
本科毕业论文指导教师评语
2014/12/30 职场文书
资深HR教你写好简历中的自我评价
2019/05/07 职场文书
使用react+redux实现计数器功能及遇到问题
2021/06/02 Javascript
Hive导入csv文件示例
2022/06/25 数据库