真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringBoot與Vue.js整合流程的示例分析

小編給大家分享一下Spring Boot與Vue.js整合流程的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

共和網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計(jì)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)成立于2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

一直都想嘗試做前后端分離,我之前一直是學(xué) Java 的,所以后端選擇了 Spring Boot;前端選擇了 Vue.js 這個(gè)輕量、易上手的框架。網(wǎng)上其實(shí)已經(jīng)有了不少 Spring Boot 和 Vue.js 整合的資料,Github 上就有好多 repo,但是每當(dāng)我指望按圖索驥的時(shí)候就會(huì)出現(xiàn)各種各樣奇怪的 bug,上 Stack Overflow 問了也沒人搭理。前前后后研究了差不多三個(gè)星期,現(xiàn)在總算是理清楚了。

本文重點(diǎn)介紹我在實(shí)踐過程中的基本流程,以及我遇到的一個(gè)困擾了我好久的問題,就是如何 CORS。

框架版本

  • Spring Boot: 2.0.4.RELEASE(JDK 是1.8)

  • Vue.js: 2.x

基本流程

前端:編寫 Vue 組件

首先用 vue-cli 搭好腳手架,我這個(gè) Demo 用到的第三方庫有:

  • axios:負(fù)責(zé) HTTP 請(qǐng)求

  • bootstrap-vue:Bootstrap 和 Vue.js 的整合,方便設(shè)計(jì)頁面

  • vue-router:管理路由

  • qs:實(shí)現(xiàn) CORS

然后寫一個(gè)登錄組件:



我現(xiàn)在想實(shí)現(xiàn)的就是用戶登錄成功之后導(dǎo)航到另一個(gè)組件,所以我就又寫了一個(gè)歡迎組件:

記得配置路由:

// src/router/index.js

import Vue from 'vue'
import Router from 'vue-router'
import Login from '@/components/Login.vue'
import Information from '@/components/Information.vue'
Vue.use(Router)
export default new Router({
 routes: [
 {
  path: '/',
  name: 'Login',
  component: Login
 },
 {
  path: '/information',
  name: 'Information',
  component: Information
 }
 ]
})

后端:提供 RESTful API

因?yàn)橹挥泻蠖颂峁┝私涌?,前端才能調(diào)用,所以現(xiàn)在要進(jìn)行后端開發(fā)。RESTful 是現(xiàn)在很流行的 API 設(shè)計(jì)風(fēng)格,所以我這里也實(shí)踐了一下。下面是 controller 的代碼,完整源碼地址附在文末。

@RestController
@RequestMapping("/api")
public class LoginController {
 @RequestMapping(path = "/login", method = RequestMethod.POST)
 @ResponseBody
 public String login(@RequestParam String username,
      @RequestParam String password) {
  // 簡單處理一下,實(shí)際開發(fā)中肯定是要用到數(shù)據(jù)庫的
  if (username.equals("123") && password.equals("123")) {
   return "successful";
  } else {
   return "failed";
  }
 }
}

后端的 API 現(xiàn)在有了,就差前端調(diào)用了。但是沒這么簡單,接下來就要解決我前面提到的問題。

實(shí)現(xiàn) CORS

在這個(gè) Demo 中前端占用的端口是8080,后端是 8088。這就存在跨域的問題,如果不解決的話后端就沒法接收前端的請(qǐng)求。

我參考了 這個(gè)例子 ,通過配置 Spring MVC 實(shí)現(xiàn)了 CORS:

@Configuration
public class CORSConfig implements WebMvcConfigurer {
 @Override
 public void addCorsMappings(CorsRegistry registry) {
  registry.addMapping("/**")
    .allowedOrigins(ALL)
    .allowedMethods(ALL)
    .allowedHeaders(ALL)
    .allowCredentials(true);
 }
}

后端配置好了還不行,前端也要有一些配置,要用 axios 順利地發(fā)送請(qǐng)求并保證后端能接收到,需要對(duì)請(qǐng)求參數(shù)做處理。我參考 這個(gè)回答 用 qs 庫對(duì)請(qǐng)求參數(shù)做了處理:

qs.stringify({
  'username': this.form.username,
  'password': this.form.password
  })

現(xiàn)在只需完善前端調(diào)用后端 API 的代碼:

// Login.vue

至此,終于實(shí)現(xiàn)了前后端的分離,并且保證前后端能夠順利交互。

題外話

讓 controller 能獲取請(qǐng)求參數(shù)

??controller 可能無法獲取請(qǐng)求參數(shù), 這篇文章 提供了一種解決方案。我這個(gè) Demo 中并沒有出現(xiàn) controller 收不到請(qǐng)求參數(shù)的問題,但也把這個(gè)問題記錄下來,以后可能遇上也說不準(zhǔn)。

axios 方法中的 this

我這個(gè) Demo 中還試著用 axios 發(fā) GET 請(qǐng)求,然后獲取后端響應(yīng)的 JSON 數(shù)據(jù)。

// Information.vue

一開始我是這么寫的,乍一看沒什么問題,但是 JavaScript 就一直報(bào)錯(cuò):

typeError: Cannot set property 'username' of undefined

搞了很久都沒有解決,直到看到 這篇文章 ,才明白原來是 this 作用域的問題(JavaScript 的 this 是真的復(fù)雜?。。。。8某上旅孢@樣就沒問題了:

axios.get('http://localhost:8088/api/information')
   .then((response) => {
    this.username = response.data['username'];
    this.email = response.data['email'];
    console.log(response);
   }).catch((error) => {
    console.log(error);
   });

后來 Stack Overflow 上有人說不用箭頭函數(shù)也行,只需提前把指向 Vue 實(shí)例的 this 保存在一個(gè)變量就行了:

var vue = this;
   axios.get('http://localhost:8088/api/information')
   .then(function (response) {
    vue.username = response.data['username'];
    vue.email = response.data['email'];
    console.log(response);
   }).catch((error) => {
    console.log(error);
   });

經(jīng)實(shí)踐,這樣也是可以的。

springboot是什么

springboot一種全新的編程規(guī)范,其設(shè)計(jì)目的是用來簡化新Spring應(yīng)用的初始搭建以及開發(fā)過程,SpringBoot也是一個(gè)服務(wù)于框架的框架,服務(wù)范圍是簡化配置文件。

以上是“Spring Boot與Vue.js整合流程的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


網(wǎng)站名稱:SpringBoot與Vue.js整合流程的示例分析
URL分享:http://weahome.cn/article/goehii.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部