当前位置: 首页 > 后端技术 > Node.js

搭建一个简单的伪热更新Mock服务

时间:2023-04-03 14:31:45 Node.js

前言刚开始接触vue-cli,发现它生成的框架代码缺少Mock模拟,于是摸索了半天,把自己摸索的结果记录下来过程中,希望能帮助到别人,少走弯路。这不是关于vue-cli,它是纯mock数据服务这不是关于vue-cli,它是纯mock数据服务,如果你有更好的方案,不要吝啬分享。实现目标1.ajax数据模拟,灵活的接口配置2.热更新(不用手动重启mock服务,自动重启不知道是不是O(∩_∩)O哈哈~)构建过程的变化1.简单mock服务2.可配置mock服务3.热更新可配置mock服务简单mock服务目录结构projectnode_modulesmockServer.jspackage.json代码中使用的node_modulesexpressmockjs代码如下mockServer.jsconstexpress=require('express');//引入express模块??constMock=require('mockjs');//引入模拟模块constapp=express();//实例化express//路由api对应的模拟数据app.all('/api',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}]}));});//监听8090端口app.listen('8090');运行的结果是可配置的模拟服务。代码功能不是功能性增长吗!!!∑(?Д?ノ)ノ。能不能愉快地保养呢?所以改进的版本就在这里。这里我通过多个json文件模拟多个请求数据,使用一个配置文件映射接口使用的文件和模块。expressmockjspathfs目录结构代码mockServer.jsconstexpress=require('express');//引入express模块??constMock=require('mockjs');//引入模拟模块constapp=express();//实例化expressconstpath=require("path");//引入路径模块核心模块是不允许的npmconstfs=require('fs');//importfsmodulecoremoduleisnotallowednpm//读取配置文件并将路由和文件映射到fs.readFile(__dirname+'/test/conf.json','utf-8',function(err,data){if(err){console.log(err);}else{letdataObject=JSON.parse(data);for(letkeyindataObject){app.all(dataObject[key].url,function(req,res){fs.readFile(path.join(__dirname+'/test',dataObject[key].path),'utf-8',function(err,data){if(err){console.log(err);}else{res.json(Mock.mock(JSON.parse(data)));}})});}}});//监听8090端口app.listen('8090');conf.json{"api1":{"url":"/api1","path":"./api1/api1.json"},"api2":{"url":"/api2","path":"./api2/api2.json"}}api1.json{"data":"我是api1"}api2.json{"api2":"hahah"}运行结果上面修改了热更新的可配置mock服务,终于不用写那么多行代码了O(∩_∩)O哈哈~不过人(我)是很懒的生物,如果改配置文件每次改,手动重启一个模拟的数据文件生效会不会很累呢?所以我们来模拟一次热更新,是不是有种高大上的感觉?就一个js文件,这里的代码借用了nodemon来检测到json文件,然后重启mock服务mockStart.jsvarnodemon=require('nodemon');//引入nodemon模块/***scriptrestartscript*extfiledetected*/nodemon({script:'mockServer.js',ext:'json'});nodemon.on('start',function(){console.log('mockServer已经启动');}).on('quit',function(){console.log('mockServer已退出');process.exit();}).on('restart',function(files){console.log('mockServerrestarteddueto:',files);});运行结果还是熟悉的界面,但是还是有不一样的味道(数字)(数据),我没有手动重启服务O(∩_∩)O哈哈~,是不是很方便参考https://github.com/nuysoft/Mo...https://github.com/remy/nodem...