1. 程式人生 > >【手摸手,帶你搭建前後端分離商城系統】02 VUE-CLI 腳手架生成基本專案,axios配置請求、解決跨域問題

【手摸手,帶你搭建前後端分離商城系統】02 VUE-CLI 腳手架生成基本專案,axios配置請求、解決跨域問題

## 【手摸手,帶你搭建前後端分離商城系統】02 VUE-CLI 腳手架生成基本專案,axios配置請求、解決跨域問題。 回顧一下上一節我們學習到的內容。已經將一個 `usm_admin 後臺使用者` 表的基本增刪改查全部都完成了。並且通過`swagger` 測試了我們的介面資訊,並且順利通過測試。本節將通過VUE 腳手架生成一個`vue-element ui` 的基本專案。並且完成登入頁面的開發和登入邏輯的整合等等。 ### 知識儲備 - 使用 `vue-cli` 生成一個基本的 `VUE` 專案 - `vue-router` vue 官方路由元件 - 整合 `element ui` - 使用 `asiox` 封裝一個發起請求的 `http.js` - 解決開發時期的 `跨域問題` > vue cli:https://cli.vuejs.org/zh/ > > vue router: https://router.vuejs.org/zh/ > > asiox:http://axios-js.com/ > > element ui:https://element.eleme.io/ ### 前端專案生成 當然,首先要保證你的計算機安裝了 `node js` ,如果順利安裝了 `node js` ,可以命令列測試如下: ```sh D:\Project>node -v v12.16.1 ``` 安裝 `vue-cli` ```sh npm install -g vue-cli ``` #### 生成 webpack 專案 使用命令初始化一個空專案,當然,這就要求你填寫一些基本資訊來初始化。 `vue init ` - 預設打包方式,一般就是`webpack` ```sh D:\Project>vue init webpack mall-pro-admin ? Project name mall-pro-admin ? Project description mall-pro-admin ? Author MRC <[email protected]> ? Vue build standalone ? Install vue-router? Yes ? Use ESLint to lint your code? Yes ? Pick an ESLint preset Standard ? Set up unit tests No ? Setup e2e tests with Nightwatch? No ? Should we run `npm install` for you after the project has been created? (recommended) npm vue-cli · Generated "mall-pro-admin". # Installing project dependencies ... ``` - Vue build: `standalone` 獨立構建,直接回車就行了。 - `vue-router` vue 路由是必須要安裝的。 - `ESLint` 一種規範程式碼的方式,不嫌麻煩就yes。 - `unit tests` 單元測試,我們一般不會用到。no - 選擇 `npm` 作為我們基本的包管理。 目錄結構如下:我們只關注的幾個點有: - `src 目錄` 打包原始碼路徑 - `config 目錄` 配置路徑 其他的等到具體的問題,我會再提起的。 ``` mall-pro-admin ├── build │ ├── build.js │ ├── check-versions.js │ ├── logo.png │ ├── utils.js │ ├── vue-loader.conf.js │ ├── webpack.base.conf.js │ ├── webpack.dev.conf.js │ └── webpack.prod.conf.js ├── config │ ├── dev.env.js │ ├── index.js │ └── prod.env.js ├── index.html ├── package-lock.json ├── package.json ├── README.md ├── src │ ├── App.vue │ ├── assets │ │ └── logo.png │ ├── components │ │ └── HelloWorld.vue │ ├── main.js │ └── router │ └── index.js └── static ``` #### 試試讓你的專案跑起來 ```sh cd mall-pro-admin # 安裝依賴 npm install # 通過開發熱部署方式打包執行 npm run dev ``` 訪問: [http://localhost:8080](http://localhost:8080) ![image-20201014112701015](https://file.chaobei.xyz/image-20201014112701015.png_imagess) ### 整合Element UI `Element UI` 其實用起來簡單,並且文件完善。有很多後臺化的元件,很適合後臺的開發。對於新手也很友好,所以我們就選擇這個框架 > 請參考:https://element.eleme.io/#/zh-CN/component/installation 在專案根路徑執行》安裝依賴 ```sh npm i element-ui -S ``` #### 使用部分引入的方式 > 部分引用,可以減少我們專案的體積。並且這種方式對於熟悉元件有一定的幫助。不建議無腦全部引用。 安裝 `babel-plugin-component` ```sh npm install babel-plugin-component -D ``` 修改根目錄 ` .babelrc ` 檔案 ```js "plugins": [ "transform-vue-jsx", "transform-runtime", [ "component", { "libraryName": "element-ui", "styleLibraryName": "theme-chalk" } ] ] ``` 當然你嫌麻煩的話。完全可以全部引用,這裡只要參考官網就行。 #### 嚐鮮一個元件 做完以上步驟、肯定要檢查自己的整合是否有問題。不要急,這裡就需要找一個元件進行測試。 > 檢視我們 `components` 目錄下的 `HelloWorld.vue` 檔案,適當的修改一下。我們就選擇一個按鈕來進行測試。 ```vue 預設按鈕
``` **記得在script標籤下引入需要的元件,不然不生效** ```javascript import Vue from 'vue' import {Button} from 'element-ui' Vue.use(Button) ``` 至此,基本的專案也構建完成,並且也整合了我們的 `UI` 框架。算是前端的骨架已搭建完成。 ### 前端請求工具類 我們知道,前後端分離的專案,所有的請求都是需要一個統一的`請求工具類` 來替我們完成的。以及路由的動態掛載,這些全部由前端請求 安裝 axios ```sh npm install axios ``` #### 建立一個工具類 按照官網的指示,我們配置一個類。將 >
請參考:http://axios-js.com/zh-cn/docs/ 建立一個 `axios` 的例項,配置基礎的請求路徑,也就是我們後端服務的地址。 再加入一個攔截器,第一時間處理所有請求的 `code` , 引入`element ui message` 進行訊息的提示。 我們使用的是 `ES6` 模組化的寫法。不會的小夥伴可以參考: > https://es6.ruanyifeng.com/#docs/module ```js import axios from 'axios' import {Message} from 'element-ui' // 建立axios例項 const service = axios.create({ baseURL: 'http://localhost/', // 基礎baseurl timeout: 15000 // 超時時間 }) // 實現攔截器,處理code 非200的請求 service.interceptors.response.use(response =>
{ const rest = response.data // code 非200 進行處理 if (rest.code !== 200) { Message({ message: rest.message, type: 'error', duration: 3 * 1000 }) } else { return response.data } }, error => { // 處理異常資訊 console.log('error' + error) Message({ message: error.message, type: 'error', duration: 3 * 1000 }) return Promise.reject(error) }) export default service ``` 因為我們後端返回的資料格式是這種最簡單的方式返回的。所以我們當然要判斷 `code` ,後面還會有登入失效`401` 等錯誤碼,遇到再說 ```json { code: 200, data: true, message: "操作成功" } ``` #### api 引用 那麼,我們前端肯定會儲存所有的後臺介面資訊,在 ` src` 建立一個 `api` 目錄,所有的**介面資訊務必歸類儲存**在每一個 `api.js` 下 因為我們在上一節中,已經通過工具生成了一個模組 `ums_admin` 的增刪改查介面。我們挑選一個最簡單的 `GET /` ```javascript import request from '@/utils/request' /** * 獲取全部使用者資訊 * @author mrc * @since 2020-10-14 */ export function allUmsAdmin () { return request({ url: '/umsAdmin/', method: 'GET' }) } ``` 前端介面也寫好了。當然就剩下:`請求` 了。還是 使用原有的 `HelloWorld.vue` 頁面。 ```javascript import {allUmsAdmin} from '@/api/umsAdmin' created () { allUmsAdmin().then(response => { console.log(response) }) } ``` 這樣寫是完全沒有問題的。在頁面建立好後,就執行`allUmsAdmin` 方法。將得到的內容進行列印 #### @符號 ```javascript import {allUmsAdmin} from '@/api/umsAdmin' ``` 可能有的朋友對這一行程式碼裡面的 `@` 有所疑惑,為什麼會這樣寫。當然,用 `../../` 這種絕對路徑也是可以的。但是目錄一多,很容易弄得你眼花。隨之一種簡便的方式就是:@ **@直接將路徑等價為:/src** 這種相對路徑就好用很多了。 > https://www.cnblogs.com/boshow/p/8758927.html ### 請求後端介面 當我們重新整理頁面訪問的時候,會發現如下錯誤。 #### 什麼是跨域 CORS 跨域是由於瀏覽器的 `同源策略` 的限制出現的問題;原因 在於瀏覽器限制: 瀏覽器發起的請求只能是:同一個域名、同一個埠下的。若埠不同,比如我們現在是從`8080埠` 傳送請求到`80埠` 自然違反瀏覽器的 **同源策略** #### 跨域問題 我們發起的請求,居然報錯了,開啟 `F12` 後發現。出現的錯誤資訊如下: ``` Access to XMLHttpRequest at 'http://localhost/umsAdmin/' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. ``` #### 後端配置解決跨域問題 `Springboot` 對於跨域有著很好的解決方式,新增一個配置類即可。 ```java @Configuration public class GlobalCorsConfig { /** * 允許跨域呼叫的過濾器 */ @Bean public CorsFilter corsFilter() { CorsConfiguration config = new CorsConfiguration(); //允許所有域名進行跨域呼叫 config.addAllowedOrigin("*"); //允許跨越發送cookie config.setAllowCredentials(true); //放行全部原始頭資訊 config.addAllowedHeader("*"); //允許所有請求方法跨域呼叫 config.addAllowedMethod("*"); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", config); return new CorsFilter(source); } } ``` 重啟專案,重新訪問試試~ ![image-20201014173741696](https://file.chaobei.xyz/image-20201014173741696.png_imagess) 已經可以正常請求資料了。至此,我們的前後端的通訊已經成功測試通過了。 ### 小結 通過本節,你已經學會如何用 `vue-cli` 來生成一個基本的專案、並且整合 常用的 `element ui` 等前端框架。 並且編寫一個 `axios` 工具類來處理所有傳送到後端的請求。 通過註解的方式解決跨域問題! #### 原始碼 https://gitee.com/mrc1999/mall-pro-learning ### 持續更新中,歡迎關注 ![](https://file.chaobei.xyz/blogs/banner_15911926172