详解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 相关文章推荐
学习YUI.Ext基础第一天
Mar 10 Javascript
javascript学习笔记(五)正则表达式
Apr 08 Javascript
JS鼠标事件大全 推荐收藏
Nov 01 Javascript
获取div编辑框,textarea,input text的光标位置 兼容IE,FF和Chrome的方法介绍
Nov 08 Javascript
页面内容排序插件jSort使用方法
Oct 10 Javascript
javascript中Date format(js日期格式化)方法小结
Dec 17 Javascript
JQuery遍历元素的父辈和祖先的方法
Sep 18 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
May 14 Javascript
Bootstrap的aria-label和aria-labelledby属性实例详解
Nov 02 Javascript
extjs图表绘制之条形图实现方法分析
Mar 06 Javascript
vue中路由跳转不计入history的操作
Sep 21 Javascript
JavaScript最完整的深浅拷贝实现方式详解
Feb 28 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定义命令空间的几个注意点(推荐)
2016/10/29 PHP
Thinkphp 框架扩展之数据库驱动常用方法小结
2020/04/23 PHP
Javascript 作用域使用说明
2009/08/13 Javascript
js 父窗口控制子窗口的行为-打开,关闭,重定位,回复
2010/04/20 Javascript
添加JavaScript重载函数的辅助方法2
2010/07/04 Javascript
初学js插入节点appendChild insertBefore使用方法
2011/07/04 Javascript
js判断变量是否未定义的代码
2020/03/28 Javascript
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
2013/11/22 Javascript
jquery插件jquery.nicescroll实现图片无滚动条左右拖拽的方法
2015/08/10 Javascript
原生js实现图片轮播特效
2015/12/18 Javascript
Angularjs注入拦截器实现Loading效果
2015/12/28 Javascript
javascript构造函数以及原型对象的理解
2017/01/13 Javascript
Node.js 基础教程之全局对象
2017/08/06 Javascript
vue使用 better-scroll的参数和方法详解
2018/01/25 Javascript
基于mpvue的小程序项目搭建的步骤
2018/05/22 Javascript
从零开始学习搭建React脚手架项目
2018/08/23 Javascript
JavaScript函数式编程(Functional Programming)箭头函数(Arrow functions)用法分析
2019/05/22 Javascript
JS造成内存泄漏的几种情况实例分析
2020/03/02 Javascript
Python的ORM框架SQLObject入门实例
2014/04/28 Python
python中使用urllib2伪造HTTP报头的2个方法
2014/07/07 Python
浅谈python脚本设置运行参数的方法
2018/12/03 Python
django实现web接口 python3模拟Post请求方式
2019/11/19 Python
python隐藏类中属性的3种实现方法
2019/12/19 Python
利用python+request通过接口实现人员通行记录上传功能
2021/01/13 Python
详解CSS3中的box-sizing(content-box与border-box)
2019/04/19 HTML / CSS
顶级宝石首饰网络零售商:Angara
2016/10/25 全球购物
美国网上鞋子零售商:Dr. Scholl’s Shoes
2017/11/17 全球购物
Ariat官网:美国马靴和服装品牌
2019/12/16 全球购物
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
设计毕业生简历中的自我评价
2013/10/01 职场文书
幼儿园中班新学期寄语
2014/01/18 职场文书
孙振耀退休感言
2015/08/01 职场文书
小学语文课《掌声》教学反思
2016/03/03 职场文书
解决Maven项目中 Invalid bound statement 无效的绑定问题
2021/06/15 Java/Android
Python使用mitmproxy工具监控手机 下载手机小视频
2022/04/18 Python
一文了解Java动态代理的原理及实现
2022/07/07 Java/Android