一统江湖的大前端(2)—— Mock.js + Node.js 如何与后端潇洒分手
《一统江湖的大前端》系列是自己的前端学习笔记,旨在介绍javascript在非网页开发领域的应用案例和发现各类好玩的js库,不定期更新。如果你对前端的理解还是写写页面绑绑事件,那你真的是有点OUT了,前端能做的事情已经太多了,
手机app开发
,桌面应用开发
,用于神经网络人工智能的库
,页面游戏
,数据可视化
, 甚至嵌入式开发
,什么火就搞什么,活脱脱一个蹭热点小能手。如果你也觉得前端的日常开发有些枯燥,不妨一起来看看前端的另一番模样。
为什么你总是下不了班
大部分工程化的项目为方便维护,大多都会采用前后端分离的开发方式,而前端和后端的工作基本也是同时下发的,这时前端开发人员就会很尴尬,后端在干活的时候,领导几乎一定会让你先做个静态页面
看看,这时候你和后端之间可能只是约定了接口(当然也可能连接口都没约定,那我只能祝你幸福了),并没有数据的传输,没法直接拿到填充网页的数据,如果一次将前端代码写到位,那么打开网页时轻则页面提示没有获取到数据,重则直接报错退出脚本。
而真正的问题在于静态页面
做起来是非常快的,以至于你的领导会认为当你把静态页面
中加入javascript的逻辑部分的代码后也应该非常快,而实际上逻辑部分的代码量和联调的工作量几乎是写一个静态页面的5-10倍。
基本上前端的一个需求的开发至少需要经历静态页面——>业务逻辑+静态数据——>业务逻辑+http请求及数据处理这几种不同形态才能交工,那么真实的时间轴变成了这样:
角色 | 阶段1 | 阶段2 | 阶段3 | 阶段4 | 阶段5 | 阶段6 |
---|---|---|---|---|---|---|
后端 | 写后台代码 | 写后台代码 | 回家睡觉 | 回家睡觉或忙其他事 | 修改前端提交的bug | 重复4-5直到能上线 |
前端 | 写静态页面 | 漫无目的改样式 | 写前端逻辑 | 边开发前端边测试接口 | 漫无目的改样式 | 重复4-5直到能上线 |
无论从哪个方面看,前端都是一个打杂的活,无论从哪个角度看,前端也都是一个小弟脸,下不了班好像也是应该的。
Node.js
Node火起来的时候,前端就流行这样一句话:不会Node.js的前端,是不完整的,简单地说,Node.js将javascript能力扩展至服务端的关键一步,js也是从此开始了自己无孔不入的风骚操作,网上关于如何使用Node.js搭起一个本地服务器数不胜数,本篇中使用express框架来快速搭建Mock服务器。
Mock.js
Mock.js
(github仓库地址)是一个生成Mock数据(也就是虚拟数据)js库,语法简单明了却非常好用,支持前端和服务端两种环境引用,感兴趣的读者可以点击上面链接进行学习,官方Wiki提供了全套文档,最多1小时就可以上手。
工作方式 | 优势 | 劣势 |
---|---|---|
客户端 | 操作方便,纯前端本地即可实现 | 1.不易进行接口管理 2.协作人员无法获得Mock数据 |
服务端 | 1.前端代码几乎不需改动 2.其他人员可访问获得Mock数据 | 需要搭建Mock服务器,相较前者稍复杂 |
简单浏览一下其使用方式:
# 安装 npm install mockjs // 使用 Mock var Mock = require('mockjs') var data = Mock.mock({ // 属性 list 的值是一个数组,其中含有 1 到 10 个元素,每个元素均包含id,name,description属性 'list|1-10': [{ 'id|+1': 1,// 属性 id 是一个自增数,起始值为 1,每次增 1 'name': '@cname',//占位符语法,生成一个中文名称 'description|3-5':'@csentence',//占位符语法,生成3-5个中文句子 'area':'@province',//省份占位符,将随机生成省份名称 }] }) // 输出结果 console.log(JSON.stringify(data))
前端的任务到底是什么
前端开发的本质,是数据的采集和数据的呈现,即把用户提交的数据准确安全地发送给服务器,把服务器传递的数据按照设计图展示在界面上,无论是否界面是否经过CSS的美化,是否经过交互设计的易用性优化,最本质的东西是一样的。
换句话说,你需要做到的是后端给的数据正确时,确保将其按设计稿展示出来,后端给的数据不正确时,给出提示并尽可能不要让脚本报错退出。
使用Nodejs和Mockjs搞事情
建议的做法是:使用node.js框架express快速搭建服务器,与后端人员约定好接口后,使用Mock.js在服务端生成各类型虚拟数据,前端开发人员直接对接Mock服务器
你应该做的,是一次性将前端代码写到位并能够快速定位联调异常,然后回家睡觉,而不是漫无目的劳作和等待跟其他人互相扯皮。
1.安装node.js
+ 安装后打开cmd命令行,输入`node -v`, 若正确显示版本号则安装成功。
附件中包含: nodeV8.9.4版本windows安装包
2.安装其他依赖包
-
yarn
(替代npm的包管理工具):npm install yarn
(可选) -
express
(express框架):npm install express -g
-
express-generator
(express项目生成插件):npm install express-generator -g
-
mockjs
(模拟数据生成库):npm install mockjs
若安装速度较慢,可切换npm源为cnpm或使用Yarn进行包管理
3.生成新的express项目并编写服务端
本篇力求简单粗暴,只讲使用不讲express目录结构,感兴趣的同学可自行研究
3.1 在指定路径下打开命令行,输入express mockserver
,即可生成名为mockserver
的项目
3.2 打开app.js
文件,在 var app = express() 之后加入如下代码,屏蔽跨域:
app.all('*', function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS"); next(); });
3.3 仿照users.js
文件的格式及其在app.js
文件中的路由挂载方式(任何一个熟练地代码搬运工肯定看得懂),引入mockjs
,生成需要的随机数据,当接收到前端发送的请求时,返回生成的数据:
//服务端响应代码片段/routes/operationboard.js: //业务逻辑为查询系统告警信息列表 //node服务器启动后,请求地址为:127.0.0.1:3000/operationboard/systemwarn //3000端口为express默认启动端口 var express = require('express'); var router = express.Router(); var Mock = require('mockjs'); var Random = Mock.Random; router.get('/systemwarn', function (req, res, next) { var data =Mock.mock({ 'list|20':[{ 'id|+1':1, 'serial_number|1-100':1, 'warn_number|1-100':1, 'warn_name|1':['流水线编排服务异常','磁盘占用超过阈值'], 'warn_level|1':['紧急','重要'], 'warn_detail':'环境IP:10.114.123.12,服务名称:XX', 'create_time':Random.datetime(), 'finish_time':Random.datetime(), 'contact|4':'abc' }] }); res.send({ meta : { message: 'success' }, status:true, data: data.list }) }) module.exports = router;
浏览器访问可在控制台打出返回数据:
3.4 在mockserver项目目录下打开命令行工具,输入npm start
,待服务启动后,打开前端页面即可看到服务器返回的模拟数据。
3.5 开启其他人员的访问能力,其实就是在本地搭建一个服务器。
实现方式1——通过express工程来实现node服务器
将前端代码拷贝至express项目目录中public文件夹(本例中为/mockserver/public),打开命令行工具输入ipconfig查询本机IP,将127.0.0.1替换为本机IP,然后在浏览器直接访问即可打开网页。
实现方式2——传统Apache服务器
为方便管理,直接使用开源XAMPP集成环境,安装完成后一键开启apache服务器,并将前端代码拷贝至安装目录中htdoc文件夹中的子文件夹中,然后以方式1中类似的方式在浏览器中访问即可,由于服务端代码取消了跨域限制,故即使端口号不同,apache服务器中的网站仍然可以访问node服务器中的接口并拿到数据。
3.6 最后,项目是大家一起做的,不是你撇清责任就完事了的,为你所做的一切提供一个可参考访问的excel文档
并把它发给与你合作开发的后端是有礼貌的做法。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
安装yaf遇到的坑
按照别人的博客介绍:https://www.cnblogs.com/shifu204/p/6743578.html 编译会有如下报错 按照豆瓣上的介绍:https://www.douban.com/note/526638954/?type=like 编译没问题 并在对应的位置找到了 20160303 ls scws.so yaf.so 添加到对应php.ini中之后,重启生效,非常开心 conf.d sudo php71-fpm restart Password: -n Gracefully shutting down php-fpm -n . done -n Starting php-fpm done 另: 博文写于晚上,白天自己在尝试第二中方法的时候,重启时会出现重启失败,算是一个蜜汁原因,报错内容为: Symbol not found: _zend_ce_countable
- 下一篇
如何把 Markdown 文件批量转换为 pdf?
需求 有个朋友提出,希望把目录中的许多 markdown 文件,批量转换为对应名称的 pdf 格式文件。我于是编写了一个 Python 脚本,并且分享给你。如果你有类似的需求,欢迎使用。 由于使用了 pandoc 作为转换工具,因此 Markdown 文件里的图片链接,不论是本地存储的(只测试了绝对路径情况),还是图床上的,都可以正确转换并且显示到 pdf 文件里。 环境 因为提出需求的朋友,使用的是 macOS 系统,因此这里我们以 macOS 系统的安装方式为准。注意下述工具实际上都是跨平台的。因此如果你使用的是 Windows 或者 Linux ,理论上也都是可以使用的。 这个脚本在 macOS 下测试通过,欢迎你把其他平台测试的结果告诉我。 python 3 建议使用 anaconda 软件包。请到这个地址下载适合自己操作系统的 Python 3 版本,并且进行安装。我曾经做了一个视频教程,完整展示和讲解了 anaconda 的安装流程,并且介绍了如何进行相关的命令行操作。欢迎点击这个链接,观看相关的介绍说明。 pandoc 请到这个链接,下载最新版本的 pandoc 并且进行...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Windows10,CentOS7,CentOS8安装Nodejs环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7设置SWAP分区,小内存服务器的救世主
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库