详解express + mock让前后台并行开发


Posted in Javascript onJune 06, 2018

在我们平时项目刚启动时,由于后台也是刚开始开发,我们前端往往在开发过程中没有数据和接口请求的,都要造一些假数据进去或者使用mock造一些数据进去,但是这样的话往往会偶合一些没用的代码进去。到时候还得删除。

下面来介绍一种 express + mock 让前后台并行开发。

前后需要先商量好数据格式,等等一系列细节问题,先不多说直接上代码

app.js

'use strict';

const express = require('express');
const app = express();

// port
let NODE_PORT = process.env.PORT || 4000;
// 监听 /user
app.use('/user', function(req, res) {
 // 让接口 500-1000ms 返回 好让页面有个loading
 setTimeout(() => {
 res.json({
  status: 1,
  msg: '查询成功',
  data: {
   name: '张三'
  }
 });
 }, Math.random() * 500 + 500);
});

app.listen(NODE_PORT, function() {
 console.log('mock服务在' + NODE_PORT + '端口上已启用!');
});

接下来我们当前文件打开命令窗口运行 node app.js

然后打开浏览器 输入 http://localhost:4000/user

详解express + mock让前后台并行开发

就完成了一个简单的模拟数据,接下来我们完善下需求

如果我们在本地开发中有时候 端口不同会报跨域问题,所以我们需要在 app.js 添加一下代码

const cors = require('cors');
app.use(cors({
 origin: '*',
 methods: ['GET', 'POST', 'PUT', 'DELETE'],
 allowedHeaders: ['conten-Type', 'Authorization']
}));

这样就可以在别的端口访问或者别的ip内网(你同时)访问了。

如果我们需要访问一些静态文件的可以添加一下代码

// './' 根据自己的需求自己配置
app.use(express.static(path.join(__dirname, './')));

// 配置nodeman热更新

var nodemon = require('nodemon');
nodemon({
 script: 'app.js',
 ext: 'json js',
 ignore: [
  '.git',
  'node_modules/**'
 ],
});

接下来继续完善, 在开发中我们不可能只有一个接口,所以我们在优化下。

app.js
'use strict';

const express = require('express');
const cors = require('cors');
const path = require('path');
var nodemon = require('nodemon');
const userRoutes = require('./user');
const areaRoutes = require('./area');
const nameListRoutes = require('./name-list');
const app = express();

app.use(cors({
 origin: '*',
 methods: ['GET', 'POST', 'PUT', 'DELETE'],
 allowedHeaders: ['conten-Type', 'Authorization']
}));

// port
let NODE_PORT = process.env.PORT || 4000;
app.use(express.static(path.join(__dirname, './')));

app.use('/user', userRoutes);
app.use('/area', areaRoutes);
app.use('/nameList', nameListRoutes);

nodemon({
 script: 'app.js',
 ext: 'json js',
 ignore: [
  '.git',
  'node_modules/**'
 ],
});

app.listen(NODE_PORT, function() {
 console.log('mock服务在' + NODE_PORT + '端口上已启用!');
});

我们需要在同级目录添加以下文件
./user/index.js , /user/area.js, /name-list/index.js

详解express + mock让前后台并行开发

./user/index.js 中的内容如下

'use strict';
const express = require('express');
const Mock = require('mockjs');
const apiRoutes = express.Router();

let random = Math.random() * 500 + 500;
// 访问 /user/ 时
apiRoutes.get('/', function(req, res) {
 setTimeout(() => {
  res.json({
   status: 1,
   msg: '查询成功',
   data: {
     name: '张三'
   }
  });
 }, random);
});
// 访问 /user/1111 时
apiRoutes.get('/idList', function(req, res) {
 setTimeout(() => {
  res.json({
   status: 1,
   msg: 'OK',
   data: Mock.mock({
      'list|1-10': [{
       'id|+1': 1
      }]
    })
  });
 }, random);
});

module.exports = apiRoutes;

我们现在在浏览器中访问

详解express + mock让前后台并行开发

详解express + mock让前后台并行开发

我们初步模拟数据基本就完成了。

接下需要在项目中用了

先区分环境

// 判断是否是本地开发
const isDev = process.env.NODE_ENV ==='development';
// 设置 host 本地走mock 生产环境走相对路径 /user/
const host = isDev ? 'http://localhost:4000' : ''

fetch(`${host}/user/`)
 .then(response => {
  return response.json();
 })
 .then(data => {
  console.log(data );
 });

假设我们在本地访问

详解express + mock让前后台并行开发

数据都能拿到了, 在试一下 别的域名访问

详解express + mock让前后台并行开发

跨域问题也OK。

我们在设置下 package.json 在你本地开发的命令后台添加 && node xx/aap.js 或者单独一个命令窗口运行

好了介绍到此。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery遍历节点的方法小集
Jan 22 Javascript
setInterval计时器不准的问题解决方法
May 08 Javascript
一个获取第n个元素节点的js函数
Sep 02 Javascript
JavaScript常用验证函数实例汇总
Nov 25 Javascript
JavaScript学习笔记之内置对象
Jan 22 Javascript
微信小程序 this和that详解及简单实例
Feb 13 Javascript
javaScript封装的各种写法
Aug 14 Javascript
使用async、enterproxy控制并发数量的方法详解
Jan 02 Javascript
vue 注册组件的使用详解
May 05 Javascript
Vue自定义全局Toast和Loading的实例详解
Apr 18 Javascript
vue.js实现左边导航切换右边内容
Oct 21 Javascript
Javascript call及apply应用场景及实例
Aug 26 Javascript
vue element项目引入icon图标的方法
Jun 06 #Javascript
vue脚手架搭建过程图解
Jun 06 #Javascript
vue左右侧联动滚动的实现代码
Jun 06 #Javascript
Express本地测试HTTPS的示例代码
Jun 06 #Javascript
微信小程序仿美团城市选择
Jun 06 #Javascript
jQuery实现百度图片移入移出内容提示框上下左右移动的效果
Jun 05 #jQuery
详解封装基础的angular4的request请求方法
Jun 05 #Javascript
You might like
php验证手机号码(支持归属地查询及编码为UTF8)
2013/02/01 PHP
解析php中static,const与define的使用区别
2013/06/18 PHP
php检测url是否存在的方法
2015/04/14 PHP
利用Ext Js生成动态树实例代码
2008/09/08 Javascript
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
2012/01/20 Javascript
使用jquery实现div的tab切换实例代码
2013/05/27 Javascript
Javascript基础教程之比较操作符
2015/01/18 Javascript
JS获取网页图片name属性的方法
2015/04/01 Javascript
javascript实现删除前弹出确认框
2015/06/04 Javascript
介绍一个简单的JavaScript类框架
2015/06/24 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
2016/06/12 Javascript
浅谈js键盘事件全面控制
2016/12/01 Javascript
JavaScript中${pageContext.request.contextPath}取值问题及解决方案
2016/12/08 Javascript
原生js实现倒计时功能(多种格式调用)
2017/01/12 Javascript
javascript数据结构之串的概念与用法分析
2017/04/12 Javascript
web前端vue之vuex单独一文件使用方式实例详解
2018/01/11 Javascript
详解在微信小程序的JS脚本中使用Promise来优化函数处理
2019/03/06 Javascript
vue将data恢复到初始状态 && 重新渲染组件实例
2020/09/04 Javascript
如何在现代JavaScript中编写异步任务
2021/01/31 Javascript
[58:35]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
Python中每次处理一个字符的5种方法
2015/05/21 Python
Python实现列表删除重复元素的三种常用方法分析
2017/11/24 Python
深入浅析python3中的unicode和bytes问题
2019/07/03 Python
Python画图高斯分布的示例
2019/07/10 Python
Python爬取破解无线网络wifi密码过程解析
2019/09/17 Python
matlab中二维插值函数interp2的使用详解
2020/04/22 Python
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
什么是JNDI的上下文?如何初始化JNDI上下文
2012/03/10 面试题
新闻专业学生的自我评价
2014/02/13 职场文书
活动总结新闻稿
2014/08/30 职场文书
学校领导班子对照检查材料
2014/09/24 职场文书
学生保证书
2015/01/16 职场文书
九年级语文教学反思
2016/03/03 职场文书
Python数据类型最全知识总结
2021/05/31 Python
如何使用PyCharm及常用配置详解
2021/06/03 Python
生命的关键成分来自太空?陨石说是的
2022/04/29 数码科技