详解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 相关文章推荐
js 限制数字 js限制输入实现代码
Dec 04 Javascript
超精准的javascript验证身份证号的具体实现方法
Nov 18 Javascript
javascript bom是什么及bom和dom的区别
Nov 26 Javascript
JS 实现Base64编码与解码实例详解
Nov 07 Javascript
微信小程序  http请求封装详解及实例代码
Feb 15 Javascript
node.js中cluster的使用教程
Jun 09 Javascript
JavaScrpt中如何使用 cookie 设置查看与删除功能
Jul 09 Javascript
vue+swiper实现组件化开发的实例代码
Oct 26 Javascript
layui表格checkbox选择全选样式及功能的实例
Mar 07 Javascript
微信小程序全局变量的设置、使用、修改过程解析
Sep 24 Javascript
解决antd datepicker 获取时间默认少8个小时的问题
Oct 29 Javascript
vue打包通过image-webpack-loader插件对图片压缩优化操作
Nov 12 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
使用sockets:从新闻组中获取文章(一)
2006/10/09 PHP
PHP 数组排序方法总结 推荐收藏
2010/06/30 PHP
PHP开发负载均衡指南
2010/07/17 PHP
使用图灵api创建微信聊天机器人
2015/07/23 PHP
使用PHP如何实现高效安全的ftp服务器(一)
2015/12/20 PHP
vmware linux系统安装最新的php7图解
2019/04/14 PHP
laravel 获取当前url的别名方法
2019/10/11 PHP
Javascript attachEvent传递参数的办法
2009/12/14 Javascript
jsp+javascript打造级连菜单的实例代码
2013/06/14 Javascript
jquery实现省市select下拉框的替换(示例代码)
2014/02/22 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
JS数字抽奖游戏实现方法
2015/05/04 Javascript
基于Jquery+div+css实现弹出登录窗口(代码超简单)
2015/10/27 Javascript
JavaScript实现九九乘法表的简单实例
2016/06/07 Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
2017/07/17 Javascript
vue实现的树形结构加多选框示例
2019/02/02 Javascript
antd的select下拉框因为数据量太大造成卡顿的解决方式
2020/10/31 Javascript
Vue使用Ref跨层级获取组件的步骤
2021/01/25 Vue.js
[23:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
学习python (1)
2006/10/31 Python
跟老齐学Python之Python安装
2014/09/12 Python
Python使用Beautiful Soup包编写爬虫时的一些关键点
2016/01/20 Python
go和python变量赋值遇到的一个问题
2017/08/31 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
2017/09/06 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
python实现抖音视频批量下载
2018/06/20 Python
Python OpenCV对本地视频文件进行分帧保存的实例
2019/01/08 Python
python实现的多任务版udp聊天器功能案例
2019/11/13 Python
使用HTML5做的导航条详细步骤
2020/10/19 HTML / CSS
玩具反斗城葡萄牙官方商城:Toys"R"Us葡萄牙
2016/10/21 全球购物
应届生高等护理求职信
2013/10/12 职场文书
人民调解员先进事迹材料
2014/05/08 职场文书
公司催款律师函
2015/05/27 职场文书
创业计划之特色精品店
2019/08/12 职场文书
血轮眼轮回眼特效 html+css
2021/03/31 HTML / CSS
golang goroutine顺序输出方式
2021/04/29 Golang