在平时开发过程当中,不少时候先后端并行开发,暂时没法调取后台接口,此时咱们不少时候可能会采起本地伪数据方式,或者采用mock数据,我之前大多采用这种方式,最近来新公司这边,发现这即是利用node本地代理方式来进行接口模拟调用,而后数据经过本地json文件读取返回,我的认为这种方式最能体现业务代码执行过程当中的众多逻辑,因此稍加研究,记录一下。固然,前提时后端跟前端有着良好的接口沟通方式,后端已经给出了接口名称和返回结构字段,这样后端接口写完了以后直接进行调试不须要再进行修改。前端
本demo采用create-react-app脚手架初始化项目,用antd-mobile进行组件化展现,用node的express搭建本地环境,superagent进行先后端请求,鉴于node执行文件修改都须要重启,这里采用nodemon进行node启动,当node执行文件有修改,会自动重启应用后台服务。node
src文件夹是业务代码,这个不是重点,app.js是node执行文件入口;router.js文件执行node读取本地josn文件返回数据的方法实现;config.js是作代理的一些配置文件;proxy-confit.js是本地代理的代理逻辑;而后上面文件夹proxy_data是准备好的本地json文件,调取接口时候就是node调取了本地json文件而后读取文件返回数据的一个过程。react
首先须要注意的是,package.json加上proxy配置git
目前网上查到好像说该配置仅仅对create-react-app初始化的项目起做用,做用就是将请求的路径修改到proxy路径,这里的host和port须要跟下面配置的host port对应。github
详细解释一下: app.js var express = require('express'); var bodyParser = require('body-parser'); var router = require('./router');// 引入router var config = require('./config');// 引入配置 var app = express(); app.use(router)// 注意执行 app.use(bodyParser.json())// 注意加上,不然返回的是数据流,不是json app.listen(config.port, function () {// 启动应用 console.log('server is run on ' + config.port); }) config.js代理配置,这里目前只有host和port根据项目需求本身加上便可。 var config = { host: 'localhost', port: 5002, } //这里面最重要的在于host/port其余能够根据项目须要加进去, module.exports = config; router.js //详细的代理和读取文件逻辑 var express = require('express'); var fs = require('fs'); var proxyConfig = require('./proxy_config.js');// 引入代理逻辑 var router = express.Router();//注意执行 /* * RESTful 路由 */ //router.get('/token', proxy.token); // 下面文件执行逻辑在于当本地请求有符合proxy_config里面配置的正则,就会被代理到本地而且读取本地对 应json文件返回相应json数据 for(var i=0; i<proxyConfig.length; i++) { (function(i){ router[proxyConfig[i].method || 'post'](proxyConfig[i].reg, function(req, res, next){ fs.readFile(__dirname + proxyConfig[i].local, 'utf8', function (err, data) { if(err) throw err; res.status(200); res.send(JSON.parse(data)); }); }); })(i) } module.exports = router; proxy_config.js 代理规则 module.exports = [{ "reg": "/collection-api/rest/userInfo", "local": "/proxy_data/userInfo.json" },{ "reg": "/collection-api/rest/planList", "local": "/proxy_data/planList.json" },{ "reg": "/collection-api/rest/planInfo", "local": "/proxy_data/planInfo.json" }] json文件根据真实需求编写。例如: { "code": 0, "data":{ "planInfo": { "id":8, "planTitle":"react boss小应用demo", "planContent":"react+router+redux+express+mongdb+node", "createTime":"2018-07-12", "deadlineTime":"2018-08-12", "planStatus":0, "expiredStatus":0 } } } 请求结果:
详细代码见github地址,下载后执行install后先启动nodemon app启动express再新开npm run start启动应用。
另外除开代理请求的内容,这个demo一样也是个react的完备小demo.采用了antd-mobie作组件开发,基于router页面层级的react-loadable执行按需加载,父子组件之间的数据传递和通讯,简单地生命周期演示和组件state数据修改。express
github地址:https://github.com/nextisleo/...
后面我会再争取把redux加进去,用一个小项目来对react进行完备的理解和开发。npm