vue项目封装api接口事项

server/2025/1/11 9:11:21/

vue项目封装api准备

  • vue项目
    • vue项目目录对应的src文件夹

vue项目

本项目只提及一些修改的细节,如有错误,可在评论区指出交流。

vue项目目录对应的src文件夹

本章节针对src文件夹下操作:
封装api,需要先创建请求的request.js文件,其次再创建api文件夹,故
第一步:
在src文件夹下创建utils文件夹,这个文件夹放的文件很重要,可以说是封装的关键文件,就是request,js文件
这个request.js文件也是自定义创建的。【csdn上面有很多request.js文件里面的内容,可以参考】。

在这里插入图片描述
本人的request文件,也是在csdn上参考的:
详细内容如下:

javascript">import axios from 'axios';axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8';
// 创建axios实例
const service = axios.create({// axios中请求配置有baseURL选项,表示请求URL公共部分baseURL: '/dev-api',// 超时timeout: 10000,
});// request拦截器
service.interceptors.request.use((config) => {return config;},(error) => {console.log('Request error: ', error);Promise.reject(error);}
);// 响应拦截器
service.interceptors.response.use((res) => {// 未设置状态码则默认成功状态const code = res.status || 200;// 二进制数据则直接返回if (res.status === code) {return res;} else {console.error('Request error: ', res);return Promise.reject(new Error('Error with status code ' + res.status));}},(error) => {console.log('err' + error);let { message } = error;if (message == 'Network Error') {message = '后端接口连接异常';} else if (message.includes('timeout')) {message = '系统接口请求超时';} else if (message.includes('Request failed with status code')) {message = '系统接口' + message.substr(message.length - 3) + '异常';}return Promise.reject(error);}
);
export default service;

第二步:
在src文件夹下创建api文件夹,并在api文件夹下创建你用到的api文件,
我们前端vue项目的接口api文件,都是js文件,所以公共接口应该是js文件
在这里插入图片描述
如图所示,api名字你自己随便取,后面我会以我取的这个名字为例。

javascript">import request from '@/utils/request';export function findByLikes(data) {return request({url: '/findByLikes',method: 'get',data: data,});
}export function findByTime(data) {return request({url: '/findByTime',method: 'get',data: data,});
}export function findByRand(data) {return request({url: '/findByRand',method: 'get',data: data,});
}

api导入request.js文件,两者建立联系: 【不要掉任何符号,尤其是:@】

javascript">import request from '@/utils/request';

第三步:
在根目录下创建两个文件(注意是根目录

.env.development
.env.production
如图:
在这里插入图片描述

这两个似乎是分辨开发环境与生产环境的,具体怎么调用我们应该也用不着:
两个文件内容很相似:

.env.development文件内容:

# 页面标题
VUE_APP_TITLE = '测试环境项目'#环境信息
ENV = 'development'#配置代理info
VUE_APP_BASE_API = '/dev-api'# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true

.env.production文件内容:

# 页面标题
VUE_APP_TITLE = '测试环境项目'#环境信息
ENV = 'production'#配置代理info
VUE_APP_BASE_API = '/prod-api'# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true

VUE_APP_BASE_API 似有不同,都在vue.config.js文件里面调用

第四步:
最后再看vue.config.js文件,
我网上找了好多博客,没找到一个完整的vue.config.js文件跟request.js以及api联系的,大佬都懒得整合,可能他们是觉得太简单了。

javascript">const { defineConfig } = require('@vue/cli-service');const port = process.env.port || process.env.npm_config_port || 8084; // 端口module.exports = defineConfig({transpileDependencies: true,devServer: {host: '0.0.0.0',port: port, // 此处修改你想要的端口号open: true,proxy: {// detail: https://cli.vuejs.org/config/#devserver-proxy[process.env.VUE_APP_BASE_API]: {target: `http://localhost:8087`,changeOrigin: true,pathRewrite: {['^' + process.env.VUE_APP_BASE_API]: '',},},},// disableHostCheck: true,},
});

先说8084 ,devServer里面的这个port你随便写任意,你写多少,浏览器的地址栏就会展示这个数字。相当于代理ip
在这里插入图片描述
代理的就是下面proxy 里面的那个target,8087才是后端项目,如下图:
下图是后端项目的连接数据库的文件,
在这里插入图片描述
里面的那个server.port 8087 ,就是上面vue.config.js文件里面的 target: http://localhost:8087,
这两个端口才是对应的,
至于那个8084,就是一个暴露的浏览器端口,后端请求,默认还是使用的8087这个端口。
这些改完之后,应该就没问题了

还有一个点就是:

javascript">  devServer: {host: '0.0.0.0',port: port, // 此处修改你想要的端口号open: true,proxy: {// detail: https://cli.vuejs.org/config/#devserver-proxy[process.env.VUE_APP_BASE_API]: {target: `http://localhost:8087`,changeOrigin: true,pathRewrite: {['^' + process.env.VUE_APP_BASE_API]: '',},},},

process.env.VUE_APP_BASE_API的VUE_APP_BASE_API是如何根据生产环境或者开发环境切换的?有大佬知道的可以评论区说一下,如果有对这个属性详细讲解生产与开发切换的博文,也可以在评论区发链接告知一下。大家互相学习,互相进步


http://www.ppmy.cn/server/157425.html

相关文章

Python标准库之SQLite3

包含了连接数据库、处理数据、控制数据、自定义输出格式及处理异常的各种方法。 官方文档:sqlite3 --- SQLite 数据库的 DB-API 2.0 接口 — Python 3.13.1 文档 官方文档SQLite对应版本:3.13.1 SQLite主页:SQLite Home Page SQL语法教程&a…

安科瑞 Acrel-1000DP 分布式光伏监控系统在工业厂房分布式光伏发电项目中的应用

吕梦怡 18706162527 摘 要:常规能源以煤、石油、天然气为主,不仅资源有限,而且会造成严重的大气污染,开发清洁的可再生能源已经成为当今发展的重要任务,“节能优先,效率为本”的分布式发电能源符合社会发…

ref() 和 reactive() 区别

ref() 和 reactive() 都是 Vue 3 中用于创建响应式数据的方法,但它们之间存在一些关键差异。 首先,ref() 用于创建响应式的标量值,比如数字、字符串、布尔值等基本数据类型,以及对象和数组等复杂数据类型。当你使用 ref() 时&…

玩转多线程--入门

目录 什么是多线程? 概念: 优点: 线程和进程区别:(面试常考题) Java线程和操作系统线程的关系: 多线程创建 方法1继承Thread类 方法2实现Runnable接口 star()和run()的区别&#xff1a…

标准应用 | 2025年网络安全服务成本度量实施参考

01 网络安全服务成本度量依据相关新变化 为了解决我国网络安全服务产业发展中面临的服务供需两方对于服务成本组成认知偏差较大、网络安全服务成本度量缺乏依据的问题,中国网络安全产业联盟(CCIA)组织北京赛西科技发展有限责任公司、北京安…

python异常机制

异常是什么? 软件程序在运行过程中,非常可能遇到刚刚提到的这些问题,我们称之为异常,英文是Exception,意思是例外。遇到这些例外情况,或者交异常,我们怎么让写的程序做出合理的处理&#xff0c…

【SQL】Delete使用

目录 语法 需求 示例 分析 代码 语法 DELETE删除表中所需内容 删除表中满足特点条件的行:DELETE FROM 表名 WHERE 条件; 删除表中所有行:DELETE FROM 表名; WHERE子句 WHERE子句用于指定从表中选取记录的条件。允许筛选数据,只返回满足…

[IoT]详细设计:智能农业监控系统

以下是基于IoT的智能农业监控系统网络拓扑的详细设计: 网络拓扑详细设计 1. 星型与网状混合拓扑 中心节点:本地服务器或集中控制器作为中心节点,负责协调和管理整个网络。传感器/执行器节点:分布在农田中,负责数据采…