最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue 調(diào)用 RESTful風(fēng)格接口操作

 更新時間:2020年08月11日 15:00:47   作者:BeniLiy  
這篇文章主要介紹了vue 調(diào)用 RESTful風(fēng)格接口操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

首先是簡單的java接口代碼

寫了四個讓前端請求的接口,以下為代碼

  @GetMapping("/v1/user/{username}/{password}")
  public Result login2(@PathVariable("username") String username, @PathVariable("password") String password){
    return Result.succResult(200,username+"--"+password);
  }
 
  @PostMapping("/v1/user")
  public Result login3(@RequestBody User user){
    return Result.succResult(200,"ok",user);
  }
 
  @PutMapping("/v1/user")
  public Result putUser(@RequestBody User user){
     return Result.succResult(200,user);
  }
 
  @DeleteMapping("/v1/user/{id}")
  public Result delete(@PathVariable Integer id){
    return Result.succResult(200,id);
  }

前端請求需要在main.js中配置

import Axios from 'axios' Vue.prototype.$axios = Axios

前端請求方式如下

在調(diào)用的時候用以下方式進行請求

   this.$axios.get('/api/v1/user/'+this.username+'/'+this.password)
        .then(data=> {
          alert('get//'+data.data.code);
        }).catch(error=> {
         alert(error);
        });
 
      this.$axios.get('/api/v1/user',{
        params: {
          username: this.username,
          password: this.password
        }
      }).then(data =>{
        alert('get'+data.data.data)
      }).catch(error => {
        alert(error)
      });
 
      this.$axios.put('/api/v1/user',{
        id: 1,
        username: this.username,
        password: this.password
      }).then(data => {
        alert('數(shù)據(jù)password:'+data.data.data.password)
        alert('數(shù)據(jù)username:'+data.data.data.username)
      }).catch(error => {
        alert(error)
      });
 
      this.$axios.delete('/api/v1/user/1')
        .then(data=> {
          alert('delete//'+data.data.code);
        }).catch(error=> {
         alert(error);
        });
        
      this.$axios.post('/api/v1/user',{
        username: this.username,
        password: this.password
      }).then(data => { 
        alert('post'+data.data.data.password)
      }).catch(error => {
        alert(error);
      });
 

補充知識:vue結(jié)合axios封裝form,restful,get,post四種風(fēng)格請求

axios特點

1.從瀏覽器中創(chuàng)建 XMLHttpRequests

2.從 node.js 創(chuàng)建 http 請求

3.支持 Promise API

4.攔截請求和響應(yīng) (就是有interceptor)

5.轉(zhuǎn)換請求數(shù)據(jù)和響應(yīng)數(shù)據(jù)

6.取消請求

7.自動轉(zhuǎn)換 JSON 數(shù)據(jù)

8.客戶端支持防御 XSRF

安裝

npm i axios–save
npm i qs --save
npm i element-ui --save
npm i lodash --save

引入

1.在入口文件中引入所需插件

main.js

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import url from './apiUrl'
import api from './apiUtil'

Vue.prototype.$axios = api.generateApiMap(url);
Vue.config.productionTip = false

Vue.use(ElementUI);
new Vue({
 router,
 store,
 render: h => h(App)
}).$mount('#app')

2.新建一個util文件夾(只要存放工具類)

在util中建apiUtil.js , apiUrl.js兩個文件

apiUtil.js 封裝請求體

import axios from 'axios'
import _ from 'lodash'
import router from '@/util/baseRouter.js'
import { Message } from 'element-ui'
import qs from 'qs'

const generateApiMap = (map) => {
 let facade = {}
 _.forEach(map, function (value, key) {
  facade[key] = toMethod(value)
 })
 return facade
}

//整合配置
const toMethod = (options) => {
 options.method = options.method || 'post'
 return (params, config = {}) => {
  return sendApiInstance(options.method, options.url, params, config)
 }
}

// 創(chuàng)建axios實例
const createApiInstance = (config = {}) => {
 const _config = {
  withCredentials: false, // 跨域是否
  baseURL: '',
  validateStatus: function (status) {
   if(status != 200){
    Message(status+':后臺服務(wù)異常')
   }
   return status;
  }
 }
 config = _.merge(_config, config)
 return axios.create(config)
}

//入?yún)⑶昂笕タ崭?
const trim = (param) =>{
 for(let a in param){
  if(typeof param[a] == "string"){
   param[a] = param[a].trim();
  }else{
   param = trim(param[a])
  }
 }
 return param
}

//restful路徑參數(shù)替換
const toRest = (url,params) => {
 let paramArr = url.match(/(?<=\{).*?(?=\})/gi)
 paramArr.forEach(el=>{
  url = url.replace('{'+el+'}',params[el])
 })
 return url
}

//封裝請求體
const sendApiInstance = (method, url, params, config = {}) => {
 params = trim(params)
 if(!url){
  return
 }
 let instance = createApiInstance(config)
 //響應(yīng)攔截
 instance.interceptors.response.use(response => {
   let data = response.data //服務(wù)端返回數(shù)據(jù)
   let code = data.meta.respcode //返回信息狀態(tài)碼
   let message = data.meta.respdesc //返回信息描述
   if(data === undefined || typeof data != "object"){
    Message('后臺對應(yīng)服務(wù)異常');
    return false;
   }else if(code != 0){
    Message(message);
    return false;
   }else{
    return data.data;
   }
  },
  error => {
   return Promise.reject(error).catch(res => {
    console.log(res)
   })
  }
 )
 //請求方式判斷
 let _method = '';
 let _params = {}
 let _url = ''
 if(method === 'form'){
  _method = 'post'
  config.headers = {'Content-Type':'application/x-www-form-urlencoded'}
  _params = qs.stringify(params)
  _url = url
 }else if(method === 'resetful'){
  _method = 'get'
  _params = {}
  _url = toRest(url,params)
 }else if(method === 'get'){
  _method = 'get'
  _params = {
   params: params
  }
  _url = url
 }else if(method === 'post'){
  _method = 'post'
  _params = params
  _url = url
 }else{
  Message('請求方式不存在')
 }
 return instance[_method](_url, _params, config)

}

export default {
 generateApiMap : generateApiMap
}

apiUrl.js 配置所有請求路徑參數(shù)

其中resetful風(fēng)格請求的路徑中的請求字段必須寫在 ‘{}'中

const host= '/api' //反向代理
export default {
 userAdd:{ url: host + "/user/add", method:"post" },
 userList:{ url: host + "/user/userList", method:"get" },
 userInfo:{ url: host + "/user/userInfo/{id}/{name}", method:"resetful"},
 userInsert:{ url: host + "/login", method:"form"},
}

使用

四種請求方式的入?yún)⒔y(tǒng)一都以object形式傳入

APP.vue

<template>
 <div class="login">
    <el-button type="primary" @click="submitForm" class="submit_btn">登錄</el-button>
 </div>
</template>
<script>
export default {
 data() {
  return {
  };
 },
 methods:{
  submitForm(){
   this.$axios.userAdd({
    id:'123',
    name:'liyang'
   }).then(data=>{
    console.log(data)
   })
  }
 }
};
</script>

ps:入?yún)⒁部梢栽僬埱骾nterceptors.request中封裝

以上這篇vue 調(diào)用 RESTful風(fēng)格接口操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vuex中this.$store.commit()和this.$store.dispatch()區(qū)別說明

    Vuex中this.$store.commit()和this.$store.dispatch()區(qū)別說明

    這篇文章主要介紹了Vuex中this.$store.commit()和this.$store.dispatch()區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue+elementui 表格分頁限制最大頁碼數(shù)的操作代碼

    vue+elementui 表格分頁限制最大頁碼數(shù)的操作代碼

    這篇文章主要介紹了vue+elementui 表格分頁限制最大頁碼數(shù)的操作代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-08-08
  • Vue插件從封裝到發(fā)布的完整步驟記錄

    Vue插件從封裝到發(fā)布的完整步驟記錄

    這篇文章主要給大家介紹了關(guān)于Vue插件從封裝到發(fā)布的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • Vue實現(xiàn)hash模式網(wǎng)址方式(就是那種帶#的網(wǎng)址、井號url)

    Vue實現(xiàn)hash模式網(wǎng)址方式(就是那種帶#的網(wǎng)址、井號url)

    這篇文章主要介紹了Vue實現(xiàn)hash模式網(wǎng)址方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • vue3+vue-router+vite實現(xiàn)動態(tài)路由的全過程

    vue3+vue-router+vite實現(xiàn)動態(tài)路由的全過程

    動態(tài)路由是根據(jù)不同情況實時變化的路由,在權(quán)限管理系統(tǒng)中,動態(tài)路由常用于根據(jù)用戶角色分配不同的菜單和功能,這篇文章主要介紹了vue3+vue-router+vite實現(xiàn)動態(tài)路由的相關(guān)資料,需要的朋友可以參考下
    2024-10-10
  • Vue結(jié)合ElementUI上傳Base64編碼后的圖片實例

    Vue結(jié)合ElementUI上傳Base64編碼后的圖片實例

    這篇文章主要介紹了Vue結(jié)合ElementUI上傳Base64編碼后的圖片實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue3中的ref與reactive使用方法對比

    vue3中的ref與reactive使用方法對比

    Vue3 提供了兩個新的 API:ref 和 reactive,它們可以幫助我們更好地管理和處理響應(yīng)式數(shù)據(jù),這篇文章主要介紹了vue3中的ref與reactive的區(qū)別和使用方法,需要的朋友可以參考下
    2023-04-04
  • 基于Vue的Drawer組件實現(xiàn)

    基于Vue的Drawer組件實現(xiàn)

    本文將從零實現(xiàn)一個Drawer抽屜組件,組件用 vue2 語法寫的,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 解決vue axios的封裝 請求狀態(tài)的錯誤提示問題

    解決vue axios的封裝 請求狀態(tài)的錯誤提示問題

    今天小編就為大家分享一篇解決vue axios的封裝 請求狀態(tài)的錯誤提示問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue監(jiān)聽滾動事件實現(xiàn)滾動監(jiān)聽

    vue監(jiān)聽滾動事件實現(xiàn)滾動監(jiān)聽

    本文主要介紹了vue監(jiān)聽滾動事件實現(xiàn)滾動監(jiān)聽的相關(guān)資料。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04

最新評論

彭泽县| 太仓市| 永福县| 巫溪县| 涿州市| 得荣县| 吉木乃县| 贵州省| 准格尔旗| 射阳县| 古蔺县| 巴青县| 缙云县| 山西省| 南丹县| 和田县| 曲沃县| 休宁县| 洱源县| 高淳县| 越西县| 平山县| 辽宁省| 紫金县| 鲁甸县| 亳州市| 丘北县| 靖边县| 玉林市| 六枝特区| 临沭县| 华安县| 巧家县| 赤峰市| 丹江口市| 武城县| 巧家县| 敦煌市| 炎陵县| 卓资县| 大丰市|