Spring Boot之前后端分離(一):Vue前端

前言

來啦老鐵,國慶中秋雙節快樂!!!

筆者學習Spring Boot有一段時間了,附上Spring Boot系列學習文章,歡迎取閱、賜教:

  1. 5分鐘入手Spring Boot;
  2. Spring Boot數據庫交互之Spring Data JPA;
  3. Spring Boot數據庫交互之Mybatis;
  4. Spring Boot視圖技術;
  5. Spring Boot之整合Swagger;
  6. Spring Boot之junit單元測試踩坑;
  7. 如何在Spring Boot中使用TestNG;
  8. Spring Boot之整合logback日志;
  9. Spring Boot之整合Spring Batch:批處理與任務調度;
  10. Spring Boot之整合Spring Security: 訪問認證;
  11. Spring Boot之整合Spring Security: 授權管理;
  12. Spring Boot之多數據庫源:極簡方案;
  13. Spring Boot之使用MongoDB數據庫源;
  14. Spring Boot之多線程、異步:@Async;

截至目前,我們學了好些Spring Boot的知識,而在Spring Boot視圖技術Spring Boot之整合Spring Security: 訪問認證Spring Boot之整合Spring Security: 授權管理 等我們也初步學習了視圖技術,做了前后端交互Demo。

而如今軟件開發迭代速度之快,前后端分離設計早已深入人心,其必要性不言而喻。今天我們就來學習基于Spring Boot + Vue做前后端分離!

項目代碼已上傳Git Hub倉庫,歡迎取閱:

整體步驟

由于讀者對前端框架Vue.js有一定的了解和使用經驗,因此我選用Vue.js做為前端框架,整體步驟:

  1. 環境準備;
  2. 使用腳手架搭建前端;
  3. 集成axios模塊;
  4. 添加Element組件庫;
  5. 使用Element組件庫添加元素;
  6. 運行vue前端;

1. 環境準備;

1). 安裝node.js,正常v8+的版本就可以了;
node.js
2). 安裝腳手架@vue/cli
npm install -g @vue/cli

或:

npm i -g @vue/cli

2. 使用腳手架搭建前端;

1). 安裝完@vue/cli腳手架后,電腦中找個合適的文件路徑,在路徑下打開cmd窗口執行以下命令,創建vue前端項目:
npm i -g @vue/cli-init
//項目名為:spring-boot-vue-frontend
vue init webpack spring-boot-vue-frontend
使用腳手架1
2). 然后按cmd窗口的提示,逐步完成相關配置選擇:
使用腳手架2
3). 命令執行完成后,我們就能得到可直接運行的vue前端項目了,項目結構如下:
vue前端
4). 修改端口:

vue項目前端默認為8080端口,我們可以在config/index.js內修改默認端口,如port: 8080改為9528(此步驟非必需,自行選擇):

修改端口

注:運行時,如果端口被占用,項目會自動選擇空閑的端口,十分貼心!

5). 禁止使用eslint;

eslint可以幫助我們在部署前端的時候(熱部署也是)快速幫我們進行代碼檢查,但有時候與編輯器如vscode的一些代碼建議沖突,筆者不太喜歡使用,我們可以在使用腳手架時選擇不用eslint,或者在選用eslint后,在代碼級別禁用eslint,具體方法為:
build/webpack.base.conf.js中,注釋createLintingRule方法內的代碼,如:

const createLintingRule = () => ({
  /* test: /\.(js|vue)$/,
  loader: 'eslint-loader',
  enforce: 'pre',
  include: [resolve('src'), resolve('test')],
  options: {
    formatter: require('eslint-friendly-formatter'),
    emitWarning: !config.dev.showEslintErrorsInOverlay
  } */
})
6). 運行前端:

項目根目錄底下直接運行以下命令:

npm start

運行前端

瀏覽器訪問http://localhost:9528http://127.0.0.1:9528 即可看到期待已久的畫面:

瀏覽器訪問

3. 集成axios模塊;

Axios 是一個基于 promise 的 HTTP 庫,可以用在瀏覽器和 node.js 中。

主要功能(來自網絡)

  • 從瀏覽器中創建 XMLHttpRequests
  • 從 node.js 創建 http 請求;
  • 支持 Promise API;
  • 攔截請求和響應;
  • 轉換請求數據和響應數據;
  • 取消請求;
  • 自動轉換 JSON 數據;
  • 客戶端支持防御 XSRF

項目根目錄底下,cmd命令行窗口直接執行命令:

npm install axios --save-dev

utils文件夾內新建request.js文件(名字任意),并寫入代碼:

import axios from 'axios'
import { Message, MessageBox } from 'element-ui'

// 創建axios實例
const service = axios.create({
  baseURL: process.env.BASE_API, // api的base_url
  timeout: 15000 // 請求超時時間
})

// request攔截器
/*
service.interceptors.request.use(config => {
  if (store.getters.token) {
    config.headers['X-Token'] = getToken() // 讓每個請求攜帶自定義token 請根據實際情況自行修改
  }
  return config
}, error => {
  // Do something with request error
  console.log(error) // for debug
  Promise.reject(error)
})
*/

// respone攔截器
service.interceptors.response.use(
  response => {
    /**
     * code為非200是拋錯 可結合自己業務進行修改
     */
    const res = response.data;
    if (res.code !== 200) {
      Message({
        message: res.data,
        type: 'error',
        duration: 5 * 1000
      })
    } else {
      return response.data;
    }
  },
  error => {
    console.log('err' + error)// for debug    
    Message({
      message: error.message,
      type: 'error',
      duration: 5 * 1000
    })
    return Promise.reject(error)
  }
)

export default service

關于axios的使用我們到前后端結合的時候再來介紹!

4. 添加Element組件庫;

Element,一套為開發者、設計師和產品經理準備的基于 Vue 2.0 的桌面端組件庫。

官方地址:https://element.eleme.cn/#/en-US,使用Element UI
能在vue框架下迅速展開UI設計與實現,也是筆者比較熟悉的組件庫,我將Element UI應用到vue框架內!

1). 安裝Element UI的npm模塊;
npm i element-ui -S --save-dev
2). 將Element UI集成到vue框架內;

修改src/main.js文件:

修改前:
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})
修改后:
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import ElementUI from 'element-ui'
import locale from 'element-ui/lib/locale/lang/en'
import 'element-ui/lib/theme-chalk/index.css'

Vue.config.productionTip = false
Vue.use(ElementUI, { locale })

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

4. 演示如何使用Element組件庫在頁面中添加元素;

1). 在這之前,我先在src底下建立幾個文件夾:

  • views文件夾用于存放功能模塊入口.vue文件;
  • views文件夾底下創建login文件夾,用于存放login模塊的.vue文件;
  • utils文件夾用于存放一些工具類;
  • api文件夾用于存放前端請求封裝(基于axios);

(現有的components文件夾用于后期存放一些我們自己寫的vue組件)

2). 在src/views/login底下新建index.vue文件,并在文件內寫入代碼:

<template>
  <div>
    <el-button type="success">Element UI button 1</el-button>
    <el-button type="danger" @click="sayHello">{{ buttonText }}</el-button>
  </div>
</template>

<script>
export default {
  name: "login",
  data() {
    return {
      buttonText: "Element UI button 2",
    };
  },
  created() {
    console.log("This is vue project!");
  },
  methods: {
    sayHello() {
      alert("Hello dylanz!");
    },
  },
};
</script>

<style>
</style>

3). router中指明路由:
在src/router/index.js文件中聲明訪問路由即頁面的訪問路徑:

修改前:
import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    }
  ]
})
修改后:
import Vue from 'vue'
import Router from 'vue-router'
import HelloWorld from '@/components/HelloWorld'
import login from '@/views/login/index'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'HelloWorld',
      component: HelloWorld
    },
    {
      path: '/login.html',
      name: 'login',
      component: login
    }
  ]
})

至此,項目整體結構為:

項目整體結構

6. 運行vue前端;

在瀏覽器中訪問http://localhost:9528/#/login.htmlhttp://127.0.0.1:9528/#/login.html

運行前端

您可能會問,這個三角形的圖片哪來的,我們沒在頁面上寫這個代碼啊?
這是因為我們寫的index.vue,會被注入src/App.vue中,進而進行展示(大概是這個意思),因此找到src/App.vue文件,刪除一行代碼:

<img src="./assets/logo.png">

保存后再次訪問(默認有熱部署)就沒有這個圖片啦!

訪問1
點擊Element UI button 2按鈕

至此,vue框架內集成Element UI到此就基本完成了,還是比較簡單的,有興趣的同學可以玩起來啦!

下一篇,我們將介紹建立一個Spring Boot后端,并且與今天介紹的這個前端進行配合,最終實現一個前后端分離的應用,敬請期待!

如果本文對您有幫助,麻煩點贊+關注!

謝謝!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。