赞
踩
使用vuecli创建项目之后,目录大概如下
接口需要安装axios
- npm i axios -S
- // or
- cnpm i axios -S
还有安装qs
- npm i qs -S
- // or
- cnpm i qs -S
package.json文件:
- {
- "name": "amazon",
- "version": "0.1.0",
- "private": true,
- "scripts": {
- "serve": "vue-cli-service serve",
- "build": "vue-cli-service build"
- },
- "dependencies": {
- "axios": "^0.26.1",
- "element-ui": "^2.15.6",
- "qs": "^6.11.0",
- "vue": "^2.6.11",
- "vue-router": "^3.2.0",
- "vuex": "^3.4.0"
- },
- "devDependencies": {
- "@vue/cli-plugin-router": "~5.0.0",
- "@vue/cli-plugin-vuex": "~5.0.0",
- "@vue/cli-service": "~5.0.0",
- "sass": "^1.32.7",
- "sass-loader": "^12.0.0",
- "vue-template-compiler": "^2.6.14"
- },
- "browserslist": [
- "> 1%",
- "last 2 versions",
- "not dead"
- ]
- }
在src目录下新建2个文件夹,api、utils。然后如果没有vue.config.js这个文件,就自己创建一个
新建文件夹之后目录如下:
在api文件夹里面创建一个index.js,
在utils文件夹里面创建2个文件,分别是base.js、http.js
api文件夹里面的index.js主要是放接口,参考如下(包含get、post请求):
- import axios from '../utils/http.js'
- import QS from 'qs'
- import base from '../utils/base.js'
-
- // /**
- // * post方法,对应post请求
- // * @desc注册请求
- // * @param {String} url [请求的url地址]
- // * @param {Object} params [请求时携带的参数]
- // */
- //登录
- export function login(data) {
- return axios({
- url: `${base.url}/users/login`,
- method: 'post',
- data: QS.stringify(data)
- })
- }
-
- // 获取菜单
- export function cd(data) {
- return axios({
- url: `${base.url}/cd/cd`,
- method: 'get',
- data: QS.stringify(data)
- })
- }
-
base.js 请求接口域名
- //请求接口域名统一管理
- const base = {
- url:'https://你的接口域名/api',
- //比如你的登录接口是https://www.website.com/index.php/api/login
- //那么你的url应该就是https://www.website.com/index.php/api
- //然后接口处理去api里面添加 /login 接口
- }
- export default base
http.js 封装axios
- import axios from 'axios'
-
- import router from '../router/index.js'
-
-
-
- // axios.interceptors.request.use(config => {
- // console.log(config)
- // config.headers.Authorization = window.localStorage.getItem('token');
- // return config;
- // })
- // 请求拦截
- axios.interceptors.request.use(
- (confing) => {
-
- //设置请求头
- if (localStorage.getItem('token')) {
-
- // 每次除了登录的时候其他情况下发起请求的时候都携带token - 因为其他接口
- confing.headers['token'] = localStorage.getItem('token');
- }
- // console.log(confing);
- return confing
- },
- (error) => {
- return Promise.reject(error)
- }
- )
-
- //响应拦截
-
- axios.interceptors.response.use(
- (response) => {
- // console.log(response);
- //401代码
- // if (response.data.code === 401) {
- // console.log('登录过期了');
- // // localStorage.removeItem('token');
- // // localStorage.removeItem('subject_name');
- // localStorage.clear();
- // Toast(response.data.msg);
- // router.push('/')
- // }
-
- //466代码
- if (response.data.code === 466) {
-
- console.log('登录过期了');
- // alert('登录过期');
- // localStorage.removeItem('token');
- // localStorage.removeItem('subject_name');
- localStorage.clear();
- // Toast(response.data.msg);
- router.push('/login')
- }
-
- return response
- },
- (error) => {
-
-
- // 获取状态码
- const { status } = error.response
-
- //401之前的代码
- // if (status === 401) {
- // // Message.error('请重新登录')
- // Toast(error.response.msg);
- // //清楚token
- // // localStorage.removeItem('token')
- // //跳转到登录页面
- // // router.push('/')
- // }
-
- //466的代码
- if (status === 466) {
- // Message.error('请重新登录')
- Toast(error.response.msg);
- //清楚token
- // localStorage.removeItem('token')
- //跳转到登录页面
- // router.push('/')
- }
- return Promise.reject(error)
- }
- )
- export default axios
接下来设置vue.config.js(项目没有就自己创建)
vue.config.js里面设置部署gitee仓库名
- //vue-background是我的仓库名 切换成你自己就行
-
- const BASE_URL = process.env.NODE_ENV === 'production' ? "/schoolwork/" : '/';
-
- module.exports = {
- publicPath: BASE_URL,
- }
vue.config.js设置好就进行打包,
npm run build
部署到gitee pages上就能正常使用了。
因为我只是写了个登录页面,没有注册页面,就单独调用下登录接口来测试,网址在下行。(我在数据库放了个账号名:admin 密码:123456 供测试)
在线测试网址:amazon (gitee.io)
还要注意你的网址是否是https还是http,建议尽量和gitee使用相同的,gitee用的https,那么接口尽量也是https的,减少出错的可能。
注:因为是vue项目部署到gitee,gitee域名请求接口不同所以需要进行接口封装。如果是有自己的服务器,放自己网站上,可直接用axios部署就行,就可跳过api、utils这2个文件夹的操作
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。