亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在vue中使用axios 數據請求第三方插件

發布時間:2021-03-24 17:01:56 來源:億速云 閱讀:236 作者:Leah 欄目:web開發

本篇文章給大家分享的是有關怎么在vue中使用axios 數據請求第三方插件,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

axios

基于http客戶端的promise,面向瀏覽器和nodejs

特色

?瀏覽器端發起XMLHttpRequests請求
?node端發起http請求
?支持Promise API
?監聽請求和返回
?轉化請求和返回
?取消請求
?自動轉化json數據
?客戶端支持抵御

安裝

使用npm:

$ npm i axiso

為了解決post默認使用的是x-www-from-urlencoded 去請求數據,導致請求參數無法傳遞到后臺,所以還需要安裝一個插件QS

$ npm install qs

一個命令全部解決

$ npm install --save axios vue-axios qs

兩種方法在vue中使用 axios

方法-:修改原型鏈

首先在 main.js 中引入 axios

import Axiso from 'axiso'

這時候如果在其它的組件中,是無法使用 axios 命令的。但如果將 axios 改寫為 Vue 的原型屬性,就能解決這個問題

Vue.prototype.$axios= Axios

 配置好了之后就可以全局使用了

示例:在main.js使用

Get請求:

//發起一個user請求,參數為給定的ID
$axios.get('/user?ID=1234')
.then(function(respone){
  console.log(response);
})
.catch(function(error){
  console.log(error);
});

Post請求

$axios.post('/user', {
  firstName: 'Fred',
  lastName: 'Flintstone'
 })
 .then(function (response) {
  console.log(response);
 })
 .catch(function (error) {
  console.log(error);
 });

為了保證請求的數據正確,可以在main.js配置如下內容:

Axios.defaults.baseURL = 'https://api.example.com';//配置你的接口請求地址
Axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;//配置token,看情況使用
Axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';//配置請求頭信息。

 那么最基本的配置已經完成了,但是還有一個問題,既然是前后端分離,那么肯定避免不了跨域請求數據的問題,接下來就是配置跨域了。

在config/index.js里面的dev里面配置如下代碼:

proxyTable: {
   '/api': {
    target: 'http://xxx.xxx.xxx.xxx:8081/',//設置你調用的接口域名和端口號 別忘了加http
    changeOrigin: true,
    pathRewrite: {
     '^/api': '/'//這里理解成用‘/api'代替target里面的地址,后面組件中我們掉接口時直接用api代替 比如我要調用'http://xxx.xxx.xxx.xx:8081/user/add',直接寫‘/api/user/add'即可
    }
   }

 完整代碼:

dev: {
  // Paths
  assetsSubDirectory: 'static',
  assetsPublicPath: '/',
  proxyTable: {
    '/api': {
    target: 'http://xxx.xxx.xxx.xxx:8081/',//設置你調用的接口域名和端口號 別忘了加http
    changeOrigin: true,
    pathRewrite: {
     '^/api': '/'//這里理解成用‘/api'代替target里面的地址,后面組件中我們掉接口時直接用api代替 比如我 要調用'http://xxx.xxx.xxx.xxx:8081/user/add',直接寫‘/api/user/add'即可
    }
   }
  },

  但是注意了,這只是開發環境(dev)中解決了跨域問題,生產環境中真正部署到服務器上如果是非同源還是存在跨域問題.

axios攔截器的使用

當我們訪問某個地址頁面時,有時會要求我們重新登錄后再訪問該頁面,也就是身份認證失效了,如token丟失了,或者是token依然存在本地,但是卻失效了,所以單單判斷本地有沒有token值不能解決問題。此時請求時服務器返回的是401錯誤,授權出錯,也就是沒有權利訪問該頁面。

我們可以在發送所有請求之前和操作服務器響應數據之前對這種情況過濾。

// http request 請求攔截器,有token值則配置上token值
axios.interceptors.request.use(
  config => {
    if (token) { // 每次發送請求之前判斷是否存在token,如果存在,則統一在http請求的header都加上token,不用每次請求都手動添加了
      config.headers.Authorization = token;
    }
    return config;
  },
  err => {
    return Promise.reject(err);
  });
// http response 服務器響應攔截器,這里攔截401錯誤,并重新跳入登頁重新獲取token
axios.interceptors.response.use(
  response => {
    return response;
  },
  error => {
    if (error.response) {
      switch (error.response.status) {
        case 401:
          // 這里寫清除token的代碼
          router.replace({
            path: 'login',
            query: {redirect: router.currentRoute.fullPath}//登錄成功后跳入瀏覽的當前頁面
          })
      }
    }
    return Promise.reject(error.response.data) 
  });

 安裝qs插件后的簡化操作

$ npm install qs
import QS from 'qs'
//axios攔截器
// 超時時間
Axios.defaults.timeout = 5000;
// http請求攔截器 請求之前的一些操作
Axios.interceptors.request.use(config => {
 if(config.method=='post'){
  config.data=QS.stringify(config.data);//防止post請求參數無法傳到后臺
 }
 return config
}, error => {
 Message.error({
  message: '加載超時'
 });
 return Promise.reject(error)
});
// http響應攔截器 請求之后的操作
Axios.interceptors.response.use(data => {
 return data
}, error => {
 Message.error({
  message: '加載失敗'
 });
 return Promise.reject(error)
});
<span > if(config.method=='post'){
  config.data=QS.stringify(config.data);//防止post請求參數無法傳到后臺
 }</span><br>這句可以直接代替
<span >Axios.defaults.baseURL = 'https://api.example.com';//配置你的接口請求地址
Axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;//配置token,看情況使用
Axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';//配置請求頭信息。</span>
<br><span >vue 訪問本地json文件的數據測試配置方法<br>第一步,準備json數據<br>json文件位置:src/data/data.json<br>第二步,配置webpack.dev.conf.js 文件<br>在webpack.dev.config.js 里面添加如下代碼:<br></span>
// webpack.dev.conf.js
// 通過express導入路由
const express = require('express')
const app = express()
var appData = require('../src/data/data.json')
// json賣家數據
var seller = appData.seller
// json商品數據
var goods = appData.goods
// json評論數據
var ratings = appData.ratings
// 編寫路由
var apiRoutes = express.Router()
// 所有通過接口相關的api都會通過api這個路由導向到具體的路由
app.use('/api', apiRoutes)
//devServer下寫入如下代碼:
 before(app) {
   app.get('/api/seller', (req, res) => {
    res.json({
     errno: 0,
     data: seller
    })//接口返回json數據,上面配置的數據seller就賦值給data請求后調用
   }),
    app.get('/api/goods', (req, res) => {
     res.json({
      errno: 0,
      data: goods
     })
    }),
    app.get('/api/ratings', (req, res) => {
     res.json({
      errno: 0,
      data: ratings
     })
    })
  }

  按照如上配置就大功告成了,webpack.dev.config.js 完整代碼如下:

'use strict'
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const path = require('path')
const baseWebpackConfig = require('./webpack.base.conf')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
const portfinder = require('portfinder')
// webpack.dev.conf.js
// 通過express導入路由
const express = require('express')
const app = express()
var appData = require('../src/data/data.json')
// json賣家數據
var seller = appData.seller
// json商品數據
var goods = appData.goods
// json評論數據
var ratings = appData.ratings
// 編寫路由
var apiRoutes = express.Router()
// 所有通過接口相關的api都會通過api這個路由導向到具體的路由
app.use('/api', apiRoutes)
const HOST = process.env.HOST
const PORT = process.env.PORT && Number(process.env.PORT)
const devWebpackConfig = merge(baseWebpackConfig, {
 module: {
  rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })
 },
 // cheap-module-eval-source-map is faster for development
 devtool: config.dev.devtool,
 // these devServer options should be customized in /config/index.js
 devServer: {
  clientLogLevel: 'warning',
  historyApiFallback: {
   rewrites: [
    { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
   ],
  },
  hot: true,
  contentBase: false, // since we use CopyWebpackPlugin.
  compress: true,
  host: HOST || config.dev.host,
  port: PORT || config.dev.port,
  open: config.dev.autoOpenBrowser,
  overlay: config.dev.errorOverlay
   ? { warnings: false, errors: true }
   : false,
  publicPath: config.dev.assetsPublicPath,
  proxy: config.dev.proxyTable,
  quiet: true, // necessary for FriendlyErrorsPlugin
  watchOptions: {
   poll: config.dev.poll,
  },
  before(app) {
   app.get('/api/seller', (req, res) => {
    res.json({
     errno: 0,
     data: seller
    })//接口返回json數據,上面配置的數據seller就賦值給data請求后調用
   }),
    app.get('/api/goods', (req, res) => {
     res.json({
      errno: 0,
      data: goods
     })
    }),
    app.get('/api/ratings', (req, res) => {
     res.json({
      errno: 0,
      data: ratings
     })
    })
  }
 },
 plugins: [
  new webpack.DefinePlugin({
   'process.env': require('../config/dev.env')
  }),
  new webpack.HotModuleReplacementPlugin(),
  new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
  new webpack.NoEmitOnErrorsPlugin(),
  // https://github.com/ampedandwired/html-webpack-plugin
  new HtmlWebpackPlugin({
   filename: 'index.html',
   template: 'index.html',
   inject: true
  }),
  // copy custom static assets
  new CopyWebpackPlugin([
   {
    from: path.resolve(__dirname, '../static'),
    to: config.dev.assetsSubDirectory,
    ignore: ['.*']
   }
  ])
 ]
})
module.exports = new Promise((resolve, reject) => {
 portfinder.basePort = process.env.PORT || config.dev.port
 portfinder.getPort((err, port) => {
  if (err) {
   reject(err)
  } else {
   // publish the new Port, necessary for e2e tests
   process.env.PORT = port
   // add port to devServer config
   devWebpackConfig.devServer.port = port
   // Add FriendlyErrorsPlugin
   devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({
    compilationSuccessInfo: {
     messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
    },
    onErrors: config.dev.notifyOnErrors
    ? utils.createNotifierCallback()
    : undefined
   }))
   resolve(devWebpackConfig)
  }
 })
})

  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'
import Axios from 'axios'
import QS from 'qs'
Vue.prototype.$axios=Axios //原型鏈配置
Vue.config.productionTip = false
//axios攔截器
// 超時時間
Axios.defaults.timeout = 5000;
// http請求攔截器
Axios.interceptors.request.use(config => {
 if(config.method=='post'){
  config.data=QS.stringify(config.data);//防止post請求參數無法傳到后臺
 }
 return config
}, error => {
 Message.error({
  message: '加載超時'
 });
 return Promise.reject(error)
});
// http響應攔截器
Axios.interceptors.response.use(data => {
 return data
}, error => {
 Message.error({
  message: '加載失敗'
 });
 return Promise.reject(error)
});
// 注冊一個全局自定義指令 `v-focus`
Vue.directive('focus', {
 // 當被綁定的元素插入到 DOM 中時……
 inserted: function (el) {
  // 聚焦元素
  el.focus()
 }
})
/* eslint-disable no-new */
new Vue({
 el: '#app',
 router,
 components: { App },
 template: '<App/>'
})

  本地成功請求數據效果:

怎么在vue中使用axios 數據請求第三方插件


以上就是怎么在vue中使用axios 數據請求第三方插件,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

万山特区| 蓬溪县| 荆门市| 临海市| 吉水县| 黄平县| 汉川市| 长海县| 乌兰浩特市| 靖安县| 南开区| 曲松县| 寻甸| 封开县| 广河县| 江孜县| 汤原县| 凌源市| 横山县| 抚顺市| 连江县| 宜州市| 西和县| 景东| 河津市| 穆棱市| 临泉县| 郑州市| 确山县| 双辽市| 两当县| 永平县| 南乐县| 台中县| 金塔县| 全南县| 邯郸县| 东乡族自治县| 江安县| 哈密市| 额尔古纳市|