国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

簡述vue項目中的兩種請求方式(axios和vueResource)

這篇具有很好參考價值的文章主要介紹了簡述vue項目中的兩種請求方式(axios和vueResource)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

今天學習了vue的兩種發(fā)送請求的方式,vueResource和axios,比較了兩種方式的使用

VueResource模塊發(fā)送請求

1. VueResource概述
  • VueJS的生態(tài)圈除了VueRouter之外,還有很多的插件,在網(wǎng)絡請求中,vue是借助于vue-resource模塊來進行異步請求,跨域請求。
  • vue-resource是Vue.js的一款插件,它可以通過XMLHttpRequest或JSONP發(fā)起請求并處理響應。也就是說,$.ajax能做的事情,vue-resource插件一樣也能做到,而且vue-resource的API更為簡潔。
  • 特點
    • 體積小,vue-resource非常小巧,在壓縮以后只有大約12KB,服務器啟用gzip壓縮后只有4.5KB大小。
    • 支持主流的瀏覽器,和vuejs一樣,vue-resource除了不支持IE9以下的瀏覽器,其他主流的瀏覽器都支持。
    • 支持PromiseAPI和URI Templates,Promise是es6的特性,Promise的中文含義為"先知",Promise對象用于異步計算。URl Templates表示URI模塊,有些類似于ASP.NET MVC的路由模塊。
    • 支持攔截器
      攔截器是全局的,攔截器可以在請求發(fā)送前和發(fā)送請求后做一些處理。
      攔截器在一些場景上非常有用,比如請求發(fā)送前在headers中設置access_token,或者在請求失敗時,提供共通的處理方式。
2. VueResource的使用步驟
  • 使用步驟

  • cdn 下載網(wǎng)址
    https://cdn.staticfile.org/vue-resource/1.5.1/vue-resource.min.js

  • 安裝vue-resource

  npm install --save vue-resource
  • 引入vue-resource模塊
  import VueResource from 'vue-resource'
  Vue.use(VueResource)
  • 調用模塊中$http發(fā)起請求
   this.$http.get('url')
   .then(function(response){
        ....
   })
  • 在組件實例加載完之后,會自動調用vueResource這個模塊
<script>
    Vue.use(vueResource)
    new Vue({
        el:'#app',
        mounted(){
            this.$http.get('http://localhost:5050/index')
            .then(result=>{
                console.log(result.data)
            })  //發(fā)送get請求
           
            this.$http.get('http://localhost:5050/details',{
                params:{lid:5}
            }).then(result=>{
                console.log(result.data)
            }) //發(fā)送帶數(shù)值的get請求
            
            this.$http.post('http://localhost:5050/users/signin',{
                uname:"dingding",
                upwd:'123456'
            }).then(result=>{
                console.log(result.data)
            })//發(fā)送post請求
        }
        
    })
</script>

axios方式發(fā)送請求

1. axios概述
  • 從vue2.0開始已經(jīng)在推崇用新的方法(axios)來代替vue-resource
  • Axios跟vue無關,在任何平臺都可以發(fā)送請求,比如nodejs 網(wǎng)頁等
  • 所以從新版的vue開始,vue-resource已經(jīng)不再被使用
2. axios的使用步驟
  • cli中axios的使用
// main.js
import Vue from 'vue'
import axios from 'axios'
import VueAxios from 'vue-axios'
注冊方式1:Vue.use(VueAxios,axios)
注冊方式2:Vue.prototype.axios=axios


//使用
this.axios.get('demo/getTest?user=tom')
  .then((res)=>{
      console.log(res.data)
  })
  • html中axios的使用
<head>
     <script src="js/axios.min.js"></script>
     <script src="js/vue.min.js"></script>
</head>
<body>
    <div id="app">
        axios.default.baseURL="http://localhost:5050"
        Vue.prototype.axios=axios
        new Vue({
            el:'#app',
            mounted(){
                this.axios.get('/index').then(result=>{
                    console.log(result.data)
                })
            }
        })
    </div>
</body>
3. Ajax應該在哪個生命周期
  • 有兩個選擇 created 和 mounted
  • 推薦 mounted
原因
created階段鉤子函數(shù)已經(jīng)可以去讀取數(shù)據(jù),mounted階段鉤子函數(shù)組件已經(jīng)渲染完成,由于ajax請求是異步,當獲取到數(shù)據(jù)時,從beforeCreate到mounted已經(jīng)運行完了,所以在created和mounted發(fā)送請求都可以。
模擬操作
@/utils/data.js
function getData(){
	return new Promise((resolve)=>{
		setTimeout(()=>{
			resolve(1000)
		},2000)
	})
}
export default getData
// home.vue

<div> {{count}} </div>
import getData from  ../utils/data
export default{
	async created(){
	    let result=await getData()
		this.count=result
	},
	mounted(){
		console.log('mounted')
	},
	activated(){
		console.log('activated')
	},
	deactivated(){
		console.log('deactivated')
	},
	updated(){
		console.log(this.data)
	}, 
	//組件渲染完,狀態(tài)發(fā)生改變才會打印
	//控制臺的update有打印,說明在mounted和created中發(fā)送請求獲取數(shù)據(jù)是在組件渲染之后,并且再一次更新dom樹。這也說明后臺獲取的數(shù)據(jù)無法做一次渲染
	data(){
		return{
			count:100
		}
	}
}


4. 實際項目中封裝axios實例和請求方法的思路
  1. 在utils公共方法文件夾的request.js中
// 導入axios
import axios from 'axios'
// 創(chuàng)建axios實例
const service = axios.create({
  // 公共接口--這里注意后面會講
  baseURL: process.env.BASE_API,
  //   baseURL: '/api',
  // 超時時間 單位是ms,這里設置了3s的超時時間
  timeout: 10 * 1000
})

// 設置請求和響應的攔截器
service.interceptors.request.use(config => {},error=>{})
service.interceptors.response.use(response => {},error=>{})
  1. 在utils公共方法文件夾的http.js中導入axios實例
// 導入封裝好的axios實例
// 封裝 get put delete post請求方法
import request from './request'
const http = {
  /**
   * methods: 請求
   * @param url 請求地址
   * @param params 請求參數(shù)
   */
  get (url, params) {
    const config = {
      method: 'get',
      url: url
    }
    if (params) config.params = params
    return request(config)
  },
  getData (url, data) {
    const config = {
      method: 'get',
      url: url
    }
    if (data) config.data = data
    return request(config)
  },
  post (url, params) {
    const config = {
      method: 'post',
      url: url
    }
    if (params) config.data = params
    return request(config)
  },
  put (url, params) {
    const config = {
      method: 'put',
      url: url
    }
    if (params) config.params = params
    return request(config)
  },
  delete (url, params) {
    const config = {
      method: 'delete',
      url: url
    }
    if (params) config.params = params
    return request(config)
  }
}
export default http
  1. 在api文件夾的api.js中寫接口
import request from '@/utils/request'
import http from '@/utils/http'

// 兩種方式寫接口
// 舉例
// 登錄接口
export function login (data) {
  return request({
    url: 'api/logn',
    method: 'post',
    data: data,
  })
}

// 首次任務開啟接口
export function startJob (id) {
  return request({
    url: 'api/jb/strt?factoryId='+id,
    method: 'get'
  })
}

// 同步任務接口
export function manualStartJob (param) {
  return http.post('api/job/StartJob', param)
}

...

  1. 在組件中xxx.vue 使用封裝好的接口方法
import {login,startJob,manualStartJob} from './api/api'

vue項目中解決跨域問題

  • 跨域的原因:瀏覽器同源策略
同源策略

著名的安全策略,注意:同源策略不是服務器行為,而是瀏覽器行為。 vue-resource和axios,交互,vue.js,javascript,前端

前端跨域報錯:

vue-resource和axios,交互,vue.js,javascript,前端

服務端解決跨域問題
  • 上線需要使用nginx代理或者服務器配置cors(每中語言有自己得配置方式)
  • 以nodejs的express框架為例:
npm i cors

let express=require('express')
let cors=requrie('cors')
let app=express()
app.listen(3000,()=>{
    console.log('3000端口,已啟動') 
})

// 配置跨域
app.use(cors,{
    //允許跨域的服務器地址,可以寫多個
    origin:['http://127.0.0.1:8080','http://localhost:8080']
})
vue項目實現(xiàn)跨域的原理

跨域是瀏覽器得安全策略,服務器和服務器之間發(fā)送請求沒有跨域,在啟動腳手架時會啟動一個內(nèi)置得web服務器,在請求時瀏覽器并沒有直接和需要請求得服務器通信,而是通過內(nèi)置得web服務器中轉。

注意:項目上線需要把打包后得文件放在服務器運行,而不是啟動腳手架運行,所以沒有內(nèi)置服務器中轉請求,此方式只適用于開發(fā)階段。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ooWbZ0TL-1683602902114)(https://note.youdao.com/yws/res/21666/WEBRESOURCE6ba5b29fcadfc7a73bef6dce6bae9ad2)]

@vue/cli4.5中處理
  • 一般情況下如果需要使用低版本得腳手架,需要重新安裝腳手架
  • 當然,npx 可以臨時創(chuàng)建一個目錄,使用4.5的腳手架
npx @vue/cli@4.5 create vue2
  • 需要手動創(chuàng)建一個vue.config.js
modules.export={
    devServer:{
        // 配置代理服務器
        proxy:{
            //定義處理那種請求的開頭
            //以后只要以/demo為開頭的請求,都會被處理
            '/demo'{
                // 往哪個服務器里發(fā)送請求
                target:'http://127.0.0.1:3000',
                pathRewrite:{
                    // ^代表字符串開頭,實際發(fā)送請求時把/demo替換成''
                    // 因為/demo并不是請求的一部分,只是代理的標識
                    '^/demo':''
                }
            }
        }
        
    }
}
@vue/cli5.0中處理
在vue腳手架中 5.0之后的版本會默認有vue.config.js文件,解決跨域問題需要在該文件中配置代理服務器
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  devServer:{
       //配置代理服務器
       proxy:{
            //定義處理那種請求的開頭
            //以后只有是以/demo為開頭的請求,都會被處理
           '/demo':{
                //往哪個服務器發(fā)送請求
                target:’http://127.0.0.1:3000,
                PathRewrite:{
                     //^代表字符串開頭,實際請求時把/demo替換成‘‘
                     // 因為/demo并不是請求得一部分,只是代理的標識
                    '^/demo':''
                }
            }
        }
    }
})    
配置完后重啟腳手架生效…….

攔截器

VueRource 使用攔截器

vue-resource和axios,交互,vue.js,javascript,前端

//cli
Vue.prototype.http=vueRource
Vue.http.interceptors.push((req,next)=>{
    //請求發(fā)送前的處理邏輯
    next((res)=>{
        //請求發(fā)送后的處理邏輯
        //res參數(shù)會返回給successCallback
        //或 errorCallback
        return res
    })
})
//cdn
<div id="app"></div>
<script>
    Vue.use(vueResource)
    Vue.$http.interceptors.push((req,next)=>{
        console.log('發(fā)送請求前攔截')
        console.log(req)
        next((res)=>{
            console.log('收到響應結果后攔截')
            console.log(res)
        })
    })
    new Vue({
        el:'#app'
        data:{
            ...
        },
        methods:{
           ...  
        },
        ...
    })
</script>
axios 使用攔截器

axios.interceptors.response.use
vue-resource和axios,交互,vue.js,javascript,前端文章來源地址http://www.zghlxwxcb.cn/news/detail-774329.html

import axios from 'axios'
var axios=axios.create() // 創(chuàng)建一個實例
axios.interceptors.request.use(config=>{ //請求攔截器
    console.log('在發(fā)送請求前攔截...')
    console.log(config)
    return config       
})
axios.interceptors.response.use(
  res=>{  //響應攔截器
      console.log(`在收到響應后攔截...`)
      console.log(res)
      return res
  }
)
  • 案例
/** **   request.js   ****/
// 導入axios
import axios from 'axios'
import { message } from 'ant-design-vue'
// 1. 創(chuàng)建新的axios實例,
const service = axios.create({
  // 公共接口--這里注意后面會講
  baseURL: process.env.BASE_API,
  //   baseURL: '/api',
  // 超時時間 單位是ms,這里設置了3s的超時時間
  timeout: 10 * 1000
})
// 2.請求攔截器
service.interceptors.request.use(config => {
  // 發(fā)請求前做的一些處理,數(shù)據(jù)轉化,配置請求頭,設置token,設置loading等,根據(jù)需求去添加
  //   config.data = JSON.stringify(config.data) // 數(shù)據(jù)轉化,也可以使用qs轉換
  //   config.data = config.data
  config.headers = {
     // 'Content-Type': 'application/x-www-form-urlencoded' // 配置請求頭
  }
  // 注意使用token的時候需要引入cookie方法或者用本地localStorage等方法,推薦js-cookie
  // 這里取token之前,你肯定需要先拿到token,存一下
  if (sessionStorage.getItem('session')) {
    // config.headers['authorization'] = sessionStorage.getItem('session')
  }
  // config.withCredentials = true
  return config
}, error => {
  Promise.reject(error)
})

// 3.響應攔截器
service.interceptors.response.use(response => {
  // 接收到響應數(shù)據(jù)并成功后的一些共有的處理,關閉loading等
  if (response.data.code === 10000) {
    message.error('用戶信息過期,請重新登錄')
    window.localStorage.removeItem('sync-session')
    window.sessionStorage.removeItem('sync-session')
    location.href = ('/sync/#/')
  }
  return response
}, error => {
  /** *** 接收到異常響應的處理開始 *****/
  if (error && error.response) {
    // 1.公共錯誤處理
    // 2.根據(jù)響應碼具體處理
    switch (error.response.status) {
      case 400:
        error.message = '錯誤請求'
        break
      case 401:
        error.message = '未授權,請重新登錄'
        break
      case 403:
        error.message = '拒絕訪問'
        break
      case 404:
        error.message = '請求錯誤,未找到該資源'
        // window.location.href = '/NotFound'
        break
      case 405:
        error.message = '請求方法未允許'
        break
      case 408:
        error.message = '請求超時'
        break
      case 500:
        error.message = '服務器端出錯'
        break
      case 501:
        error.message = '網(wǎng)絡未實現(xiàn)'
        break
      case 502:
        error.message = '網(wǎng)絡錯誤'
        break
      case 503:
        error.message = '服務不可用'
        break
      case 504:
        error.message = '網(wǎng)絡超時'
        break
      case 505:
        error.message = 'http版本不支持該請求'
        break
      default:
        error.message = `連接錯誤${error.response.status}`
    }
  } else {
    // 超時處理
    if (JSON.stringify(error).includes('timeout')) {
      message.error('服務器響應超時,請刷新當前頁')
    }
    error.message = '連接服務器失敗'
  }

  message.error(error.message)
  /** *** 處理結束 *****/
  // 如果不需要錯誤處理,以上的處理過程都可省略
  return Promise.resolve(error.response)
})
// 4.導入文件
export default service

到了這里,關于簡述vue項目中的兩種請求方式(axios和vueResource)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 簡單易懂:Axios 如何取消請求的兩種方法

    簡單易懂:Axios 如何取消請求的兩種方法

    在前端開發(fā)中,網(wǎng)絡請求是非常常見的操作。而有時候,我們可能需要在發(fā)送請求后取消它,比如用戶在請求還未完成時離開了當前頁面或者執(zhí)行了其他操作,本文將介紹如何在使用 Axios 發(fā)送請求時取消這些請求。 在 Axios 中,取消請求的基本思路是創(chuàng)建一個用于取消的標記

    2024年01月19日
    瀏覽(19)
  • vue2創(chuàng)建項目的兩種方式,配置路由vue-router,引入element-ui

    vue2創(chuàng)建項目的兩種方式,配置路由vue-router,引入element-ui

    提示:vue2依賴node版本8.0以上 使用@vue/cli腳手架vue create創(chuàng)建 使用vue-cli腳手架vue init webpack創(chuàng)建 1、查看nodejs版本 2、全局安裝vue腳手架和webpack腳手架 3、新建vue2項目 創(chuàng)建選項除了,Install vue-router??選擇是,其他選擇的否 4、安裝依賴并啟動文件 5、預覽 6、目錄結構 1、如果安

    2024年04月14日
    瀏覽(26)
  • axios和vite在本地開發(fā)環(huán)境配置代理的兩種方式,五分鐘學會

    axios和vite在本地開發(fā)環(huán)境配置代理的兩種方式,五分鐘學會

    如果你使用vue或者react開發(fā),就得使用axios吧,然后為了解決跨域問題,就得使用vite配置吧,那怎么協(xié)調配置它們兩個才能正常工作呢? 正常的流程:配置axios的baseURL,然后配置vite的proxy 配置axios的baseURL: 然后再配置vite的proxy:在vite.config.js中配置 如果你想將路徑重寫也是

    2024年02月04日
    瀏覽(21)
  • 關于部署vue項目在Linux上的兩種方式tomcat以及nignx(1)使用tomcat進行部署

    關于部署vue項目在Linux上的兩種方式tomcat以及nignx(1)使用tomcat進行部署

    阿丹有話說: ? ? ? ? 之前在寫spring-boot項目的時候是直接寫的jsp頁面直接打成war包來運行。使用到了tomcat,而且簡單方便,但是美中不足就是動畫演示以及頁面沒有辦法做的非常美觀。自從開始寫前后端分離的項目(微服務等)之后,發(fā)現(xiàn)element-ui是真的好用?,F(xiàn)在想給vue的

    2024年02月03日
    瀏覽(20)
  • 關于部署vue項目在Linux上的兩種方式tomcat以及nignx(3)使用nignx進行部署

    關于部署vue項目在Linux上的兩種方式tomcat以及nignx(3)使用nignx進行部署

    阿丹有話說: ? ? ? ? 前兩篇文章主要講解了將vue中tomcat部署研究了。解決了在后臺代碼中通過過濾器來解決跨域問題。后期會繼續(xù)出在tomcat中的代理配置等。本篇文章來將vue項目部署在nignx上,并且通過反向代理來解決跨域請求以及請求轉發(fā)。 ?首先我們再來了解一下ngi

    2024年02月04日
    瀏覽(28)
  • Qt Http請求,post和get的兩種方式

    Qt Http請求,post和get的兩種方式

    今天我們介紹一下QT的http請求,這里有post和get兩種方式 一、post請求方式:參數(shù)分為網(wǎng)址和具體請求值兩個部分,有時候還需要設置頭信息,看具體情況定 二、get請求方式:參數(shù)和網(wǎng)址拼接到一起請求 三、主要區(qū)別: get用于請求獲取數(shù)據(jù),post向指定的資源創(chuàng)建修改數(shù)據(jù) g

    2024年02月15日
    瀏覽(25)
  • (一)python發(fā)送HTTP 請求的兩種方式(get和post )

    注:發(fā)送請求(包括請求行、方法類型、頭、體) 常見的請求方式有get、post、put、delete ? ? ? ? ? ?格式:requests.get() (內(nèi)容: url必填; params選填:url參數(shù)字典) # ~ 無參數(shù)的get請求 # ~ 有參數(shù)的get請求 # ~ 使用params的get請求 ? ? ? ?知識擴展# ?requests.post() post請求分為5種,常用

    2024年02月02日
    瀏覽(37)
  • MySQL中的兩種特殊插入方式

    代碼案例 PointMapper.java PointMapper.xml 代碼案例 PointMapper.java PointMapper.xml on duplicate key update 和 replace into 是兩種處理重復鍵沖突的方法,但它們具有一些區(qū)別 功能不同 on duplicate key update 在插入數(shù)據(jù)時,如果遇到重復鍵沖突,會更新已存在的行的值 replace into在插入數(shù)據(jù)時,如果遇

    2024年02月12日
    瀏覽(15)
  • vue實現(xiàn)導出excel的兩種方式

    通過vue實現(xiàn)導出有兩種方式: (1)后端返回的是一個地址,直接拼接打開下載就行 (2)后端返回的是文件流的形式,這個時候就需要在請求頭還有返回值的地方設置一下 (1)設置請求頭 (2)設置返回結果,處理返回我文件流 (3)附加說明 有的時候做到上述幾步還是不

    2024年02月12日
    瀏覽(15)
  • SpringBoot項目模塊間通信的兩種方式

    SpringBoot項目模塊間通信的兩種方式

    說明:在微服務架構開發(fā)中,一個請求是通過模塊之間的互相通信來完成的,如下面這個場景: 創(chuàng)建兩個子模塊:訂單模塊(端口8081)、用戶模塊(端口8082),兩個模塊之間沒有聯(lián)系,現(xiàn)在需要查詢訂單,根據(jù)訂單中的用戶ID,查詢該訂單對應的用戶信息。 (兩個模塊是獨

    2024年02月15日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包