当前位置: 首页 > news >正文

express + mock 让前后台并行开发

在我们平时项目刚启动时,由于后台也是刚开始开发,我们前端往往在开发过程中没有数据和接口请求的,都要造一些假数据进去或者使用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

clipboard.png

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

如果我们在本地开发中有时候 端口不同会报跨域问题,所以我们需要在 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热更新
nodemon 可以按照需求自己配置
接下来继续完善, 在开发中我们不可能只有一个接口,所以我们在优化下。

app.js
'use strict';

const express = require('express');
const cors = require('cors');
const path = require('path');
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);

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

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

clipboard.png

./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;

我们现在在浏览器中访问
clipboard.png

clipboard.png

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

接下需要在项目中用了

先区分环境

// 判断是否是本地开发
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 );
  });

假设我们在本地访问

clipboard.png

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

clipboard.png

跨域问题也OK。

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

好了介绍到此。

相关文章:

  • Android黑科技: 快速找到view所在的xml文件
  • 30天自制操作系统-2
  • Python运行速度如何?
  • keepalived实现服务高可用
  • js如何遍历表单所有控件
  • Vue.js 2.x笔记:安装与起步(1)
  • Form身份验证
  • Linux常用命令——runlevel、init
  • python爬虫——爬取豆瓣TOP250电影
  • 携程小程序初体验
  • java虚拟机之垃圾回收算法
  • 10分钟了解JS堆、栈以及事件循环的概念
  • 常见面试题—css实现垂直水平居中
  • hyperLedger fabric 从0到1 + End2EndIT源码解析
  • 天猫校园店一个月签约100家高校!未来要服务2000万高校人群
  • 「译」Node.js Streams 基础
  • 【Leetcode】104. 二叉树的最大深度
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • 【知识碎片】第三方登录弹窗效果
  • 03Go 类型总结
  • C++11: atomic 头文件
  • CSS 专业技巧
  • js正则,这点儿就够用了
  • Map集合、散列表、红黑树介绍
  • oldjun 检测网站的经验
  • redis学习笔记(三):列表、集合、有序集合
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 嵌入式文件系统
  • 我是如何设计 Upload 上传组件的
  • 一份游戏开发学习路线
  • 由插件封装引出的一丢丢思考
  • 正则学习笔记
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • # 数据结构
  • ()、[]、{}、(())、[[]]命令替换
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (solr系列:一)使用tomcat部署solr服务
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (一)kafka实战——kafka源码编译启动
  • (一)Neo4j下载安装以及初次使用
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)我也是一只IT小小鸟
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NET下ASPX编程的几个小问题
  • .Net中wcf服务生成及调用
  • .net中应用SQL缓存(实例使用)
  • /boot 内存空间不够
  • /etc/fstab 只读无法修改的解决办法
  • ?.的用法
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解