IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 前端 mock 接口响应数据 -> 正文阅读

[JavaScript知识库]前端 mock 接口响应数据

目录

写在开头

对mock和express的个人理解

本次案例效果图?

项目结构

启动服务

mock编写

服务文件:mockServer.js

?接口文件:mockApi.js

前端项目处理

结束


写在开头

我是一个纯前端,不懂node里面的express,但是在这个mock里,查查资料也能用~

对mock和express的个人理解

1.前端mock与所用的前端框架没有关系。
2.mock让前后端可同步开发,待后端完成开发,前端切换接口api稍加调试即可发布到测试和生产环境
3.可以在不泄露公司数据的情况下,演示整个项目功能。
4.mock功能只能用于本地开发
5.需要安装mockjs而不是mock,这是重点

npm i mockjs --save-dev

6.express是node里面的模块,只要项目是跑在node环境下,即可引用。?

本次案例效果图

mock了列表数据,点击查询,返回mock出来的列表数据。

项目结构

新增一个mock目录,有mockServer.js和mockApi.js,分别为服务器文件和接口文件
注意:mock目录可放在任何地方,启动mockServer相当于模拟了一个后端服务器。api则模拟了后端的接口响应数据。

启动服务

1.package.json的启动配置如图

    "scripts": {
        "mock": "nodemon ./src/mock/mockServer.js",
        "start-dev": "cross-env UMI_ENV=development umi dev",
        "start-test": "cross-env UMI_ENV=test umi dev",
        "start-prod": "cross-env UMI_ENV=prod umi dev",
        "build-dev": "cross-env UMI_ENV=development umi build",
        "build-test": "cross-env UMI_ENV=test umi build",
        "build-prod": "cross-env UMI_ENV=prod umi build",
        "postinstall": "umi generate tmp",
        "prettier": "prettier --write '**/*.{js,jsx,tsx,ts,less,md,json}'",
        "test": "umi-test",
        "test:coverage": "umi-test --coverage"
    },

2.安装nodemon,也可以直接用node运行起来,不过node不是hot监听的

npm i nodemon --save-dev

3.引用nodemon的原因:修改mock目录里面的文件时,会自动运行mock服务器。
如果是node ./src/mock/mockServer.js,则修改mock里面的文件,需要ctrl+c关掉运行程序,重新npm run mock。
4.启动前端项目。比如我的项目,npm run start-dev。
5.启动mock服务器。比如我的项目,npm run mock。

mock编写

mock的语法见Mock.Random部分
Home · nuysoft/Mock Wiki · GitHub

服务文件:mockServer.js

const express = require('express');
const app = express(); //创建express 实例

app.all('*', (req, res, next) => {
    // google需要配置,否则报错cors error
    res.setHeader('Access-Control-Allow-Credentials', 'true');
    // 允许的地址,http://192.168.1.111这样的链接,如果本地是http://127.0.0.1,可以改为http://127.0.0.1
    res.setHeader('Access-Control-Allow-Origin', 'http://192.168.1.111');
    // 允许跨域请求的方法
    res.setHeader(
        'Access-Control-Allow-Methods',
        'POST, GET, OPTIONS, DELETE, PUT',
    );
    // 允许跨域请求header携带哪些东西
    res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
    // if (req.method.toLowerCase() === 'options') {
    //     res.sendStatus(200); // 让options尝试请求快速结束
    // } else {
    next();
    // }
});

//基本路由:app.METHOD(PATH, HANDLER)
app.get('/', function(res, req) {
    //req(请求),res(响应)
    req.send('test!');
});

app.use('/umiapi', require('./mockApi')); //装入mockApi路由器模块

//应用程序会启动服务器,并在端口 3000 上侦听连接,3000端口可以修改,如8000,8001等等
app.listen(3000, function() {
    console.log('Example app listening on port 3000!');
});

?接口文件:mockApi.js

const express = require('express');
const Mock = require('mockjs');
const router = express.Router();

// 请求 /umiapi/test 接口
router.post('/test', function(req, res) {
    //调用mock方法,模拟数据
    let data = Mock.mock({
        status: 200,
        data: {
            total: 20,
            'list|10': [{
                'storeCode|+1': 1000,
                storeName: '@cname()',
                yearmonth: '@date("yyyy-MM")',
                startupType: '@STRING("ABC",1)',
                persons: '@integer(1,10)',
                examDays: '@integer(1,10)',
                reGrTaskAvg: '@float(1,10,2,2)',
                storeDivide: '@float(1,10,2,2)',
                personName: '@cname()',
                partnerType: '@STRING("ABC",1)',
                partnerRatio: '@float(1,10,2,2)',
                cqRatio: '@float(1,10,2,2)',
                personDivide: '@float(1,10,2,2)',
                cmFee: '@float(1,10,2,2)',
            }, ],
        },
        result: true,
        message: '请求成功!',
    });
    return res.json(data); //res.json()发送 JSON 响应。
});


//请求 /umiapi/userInfo 接口
router.get('/userInfo', function(req, res) {
    //调用mock方法,模拟数据
    let data = Mock.mock({
        status: 200,
        content: {
            name: 'mollealala',
            age: '18',
            from: 'Hunan',
        },
        message: '请求成功啦',
    });
    return res.json(data);
});

module.exports = router;

前端项目处理

在区分环境的api文件中,将development环境的api地址改为http://localhost:3000/umiapi/即可
如,我的项目为:

enum BUILD_ENV {
  PROD = 'prod',
  TEST = 'test',
  DEV = 'development',
}
const { UMI_ENV = '' } = process.env
const target = JSON.parse(UMI_ENV)
export default {
  /** 接口根地址 */
  getApiPrefix: (() => {
    switch (target) {
      case BUILD_ENV.PROD:
        return 'https://abc.com/'
      case BUILD_ENV.TEST:
        return 'https://abc.test.com/'
      case BUILD_ENV.DEV:
        return 'http://localhost:3000/umiapi/'
      default:
        return ''
    }
  })()
}

结束

1.如果发现请求方法是options 200,没有继续发出get/post请求,首先在控制台看看network》》other有没有请求,如果没有,则需要上网搜一下预检请求。或者直接参考官网:Cross-Origin Resource Sharing (CORS) - HTTP | MDN
2.express中app的use方法:可以将同一功能模块的接口封装在一个api文件里面,如个人信息,登录,注册,某某列表等功能模块。
3.整篇都没有设置proxy代理来解决跨域,因为mock服务器已经设置了允许本地访问,见Access-Control-Allow-Origin属性。

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-31 23:55:34  更:2022-03-31 23:58:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:49:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码