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

Vue中使用matomo進(jìn)行訪問流量統(tǒng)計(jì)的實(shí)現(xiàn)

 更新時(shí)間:2019年11月05日 09:57:01   作者:何記云  
這篇文章主要介紹了Vue中使用matomo進(jìn)行訪問流量統(tǒng)計(jì)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

之前做到了一個(gè)頁(yè)面及接口訪問流量統(tǒng)計(jì)的需求, 然后在網(wǎng)上找了很多帖子,發(fā)現(xiàn)有些有的但是寫的都不是很詳細(xì),所以今天就整理了一下

正文

第一步

首先自然是引入matomo

npm i vue-matomo

第二步

在main.js中注冊(cè)一下matomo

import VueMatomo from 'vue-matomo'
Vue.use(VueMatomo, {
 host: 'http://matomo.na.xyz', // 這里配置你自己的piwik服務(wù)器地址和網(wǎng)站ID
 siteId: 3,//siteId值
 // 根據(jù)router自動(dòng)注冊(cè)
 router: router,
 // // 是否需要在發(fā)送追蹤信息之前請(qǐng)求許可
 // // 默認(rèn)false
 requireConsent: false,
 enableLinkTracking: true,
 // // 是否追蹤初始頁(yè)面
 // // 默認(rèn)true
 trackInitialView: false,
 // // 最終的追蹤js文件名
 // // 默認(rèn) 'piwik'
 trackerFileName: 'matomo',
 debug: false
});

當(dāng)然這里也可以提出一個(gè)公共的文件來(lái)動(dòng)態(tài)維護(hù)你的piwik服務(wù)器地址和網(wǎng)站

import VueMatomo from 'vue-matomo'
// 動(dòng)態(tài)維護(hù)的文件
import baseUrlto from './utils/baseUrlto'

// 這段代碼作用是獲取當(dāng)前加載的路徑,并去維護(hù)文件中數(shù)組里匹配出相應(yīng)的的集合對(duì)象.
let uitem
baseUrlto.map(e => {
 if (document.URL.indexOf(e.environmentUrl) !== -1) {
 uitem = e
 }
})
if (!uitem) {
 uitem = baseUrlto[0]
}
Vue.use(VueMatomo, {
 host: uitem.staUrl, // 這里是匹配到的地址
 siteId: uitem.staId, //這里是匹配到的siteId值
 // 根據(jù)router自動(dòng)注冊(cè)
 router: router,
 // // 是否需要在發(fā)送追蹤信息之前請(qǐng)求許可
 // // 默認(rèn)false
 requireConsent: false,
 enableLinkTracking: true,
 // // 是否追蹤初始頁(yè)面
 // // 默認(rèn)true
 trackInitialView: false,
 // // 最終的追蹤js文件名
 // // 默認(rèn) 'piwik'
 trackerFileName: 'matomo',
 debug: false
});

附上baseUrlto的代碼

const statistics = [
// 數(shù)組第一項(xiàng),即為,當(dāng)路徑匹配不到時(shí),默認(rèn)傳送的統(tǒng)計(jì)網(wǎng)址,可以是開發(fā)環(huán)境下測(cè)試統(tǒng)計(jì)的地址
 {
 staUrl: '//analytics.baowei-inc.com/', // 統(tǒng)計(jì)網(wǎng)址
 staId: '2', // 統(tǒng)計(jì)ID
 environmentUrl: '默認(rèn)'
 },
 {
 staUrl: '//analytics.baowei-inc.com/', // 開發(fā)環(huán)境統(tǒng)計(jì)網(wǎng)址
 staId: '2', // 統(tǒng)計(jì)ID
 environmentUrl: 'http://bwcaigou.baowei-inc.com'
 },
 {
 staUrl: '//analytics.baowei-inc.com/', // 生產(chǎn)環(huán)境統(tǒng)計(jì)網(wǎng)址
 staId: '1', // 統(tǒng)計(jì)ID
 environmentUrl: 'http://portal.baowei-inc.com'
 },
 {
 staUrl: '//106.12.95.245:8888/', // 本地環(huán)境統(tǒng)計(jì)網(wǎng)址
 staId: '2', // 統(tǒng)計(jì)ID
 environmentUrl: 'http://localhost:'
 }
]

export default statistics

第三步 ,是在app.vue中監(jiān)聽路由變化

watch: {
  '$route' () {
  let locationHash = window.location.hash;
  //把路由存在緩存中,此處你可以console.log看出路由變化
  sessionStorage.setItem("hashLocation",locationHash);
  }
 },

第四步, 然后在每一個(gè)被跳轉(zhuǎn)時(shí)都需要統(tǒng)計(jì)的組件中,添加上一段追蹤信息的代碼,每一個(gè)頁(yè)面組件, 對(duì)于反復(fù)使用的子組件不需要添加,彈窗等也不需要,針對(duì)的是頁(yè)面級(jí)得組件,

// 這里說明一下, this.$matomo是注冊(cè)過后,自動(dòng)會(huì)有得, 不需要進(jìn)行其他得操作.
 created(){
  const hashLocation= sessionStorage.getItem("hashLocation");//緩存中獲取當(dāng)前頁(yè)面的路由名稱
  const newLocation = hashLocation.split("#/")[1];
  // 注意, 這里使用全路徑匹配,在hash模式中,因?yàn)榈刂窌?huì)攜帶#,所以頁(yè)面報(bào)告中的url需要重新覆蓋一下, 將#去除
  this.$matomo.setCustomUrl("http:baidu.com"+"/"+newLocation);//覆蓋頁(yè)面報(bào)告的url,可以自定義頁(yè)面url,加上本頁(yè)面路由
  // this.$matomo.trackEvent(shopCode,hashLocation);//事件
  this.$matomo.trackPageView(hashLocation);//頁(yè)面名稱,可以自定義頁(yè)面名稱
 }

圖片現(xiàn)在上傳不了,稍后回去上傳上來(lái),

特地說明一下, setCustomUrl的作用是重新設(shè)定url,因?yàn)樵趍atomo的頁(yè)面網(wǎng)址統(tǒng)計(jì)那塊中,它是通過url去統(tǒng)計(jì)的, 如果不做處理的話, 會(huì)自動(dòng)統(tǒng)計(jì)域名后一級(jí)目錄為相同頁(yè)面, 也就是說, /#/會(huì)被讀取為一個(gè)頁(yè)面網(wǎng)址,不處理的話,那么無(wú)論訪問哪個(gè)頁(yè)面,都會(huì)被統(tǒng)計(jì)為/index頁(yè)面.

// 注意, 這里使用全路徑匹配,在hash模式中,因?yàn)榈刂窌?huì)攜帶#,所以頁(yè)面報(bào)告中的url需要重新覆蓋一下, 將#去除
  this.$matomo.setCustomUrl("http:baidu.com"+"/"+newLocation);// 非全路徑
  this.$matomo.setCustomUrl("http://www.baidu.com"+"/"+newLocation); // 全路徑
  //覆蓋頁(yè)面報(bào)告的url,可以自定義頁(yè)面url,加上本頁(yè)面路由

重要的事說兩遍, 需要全路徑字符串, 否則依然會(huì)把#帶上.

第五步, 其實(shí)到這里, 已經(jīng)能正常統(tǒng)計(jì)數(shù)據(jù)了,下面是一些優(yōu)化的步驟.

針對(duì)接口的統(tǒng)計(jì)

針對(duì)接口的統(tǒng)計(jì)就是在請(qǐng)求攔截器中添加發(fā)送統(tǒng)計(jì)信息的代碼

import pathToname from '@/utils/pathname'
// 請(qǐng)求攔截器
service.interceptors.request.use(
config => {
 if (config.url.indexOf('/login') === -1) {
 // 設(shè)置用戶名
 const name = store.getters.name
 let urlName
 let curl = config.url
 curl = curl.split('?')[0] || curl
 // 將請(qǐng)求地址轉(zhuǎn)為中文
 for (const k in pathToname) {
  if (curl === k) {
  urlName = pathToname[k]
  } else {
  const kurl = k
  const turl = curl
  const karr = kurl.split('/')
  if (karr[karr.length - 1] === '*') {
   // 代表最后一位為*
   karr.splice(karr.length - 1, 1)
   const karr1 = turl.split('/')
   karr1.splice(karr1.length - 1, 1)
   const str = karr.join('/')
   const str2 = karr1.join('/')
   if (str === str2) {
   urlName = pathToname[k]
   }
  } else {
   karr.splice(karr.length - 2, 1)
   const str = karr.join('/')
   const karr1 = turl.split('/')
   karr1.splice(karr1.length - 2, 1)
   const str2 = karr1.join('/')
   if (str === str2) {
   urlName = pathToname[k]
   }
  }
  }
 }
 // urlName = urlName || '其他'
 urlName = urlName || config.url
 window._paq.push(['setCustomUrl', `${document.URL.split('/#')[0]}${curl}123`])
 window._paq.push(['setDocumentTitle', urlName])
 window._paq.push(['setUserId', name])
 window._paq.push(['trackPageView'])
 }

圖片依然等回去上傳

當(dāng)然,我這里用的是js的方式原理是一樣的,上面的代碼,是我對(duì)統(tǒng)計(jì)的地址名做了中文化的匹配.因?yàn)榻涌诘亩鄻有?需要做一個(gè)處理,比如說,路徑傳參中, 其實(shí)只是參數(shù)變了,地址沒變, 這個(gè)時(shí)候不能算一個(gè)新的地址, 所以就需要匹配處理. 代碼沒寫太復(fù)雜, 一步一步深入,基本上很容易懂.

附上pathname的代碼. 用于將地址匹配為中文統(tǒng)計(jì),:

const changeName = {
// goods相關(guān)API
'/pdc/api/v1/dic/query': '基礎(chǔ)檔案管理-獲取貨品信息',
'/pdc/api/v1/product/query': '基礎(chǔ)檔案管理-獲取貨品詳情',
// role相關(guān)API
'/api/root/list': '基礎(chǔ)-獲取菜單權(quán)限',
'/api/createRole': '權(quán)限管理-創(chuàng)建角色',
'/api/checkRoleName': '權(quán)限管理-查詢角色是否存在',
'/api/custom/master/permission': '權(quán)限管理-獲取外部客戶角色列表',
'/api/internal/user/info': '基礎(chǔ)-獲取用戶信息',
// statement相關(guān)API
'/statement/financialForm': '財(cái)務(wù)管理-獲取JIT財(cái)務(wù)列表',
'/statement/export': '財(cái)務(wù)管理-導(dǎo)出JIT財(cái)務(wù)報(bào)表',
'/statement/count': '財(cái)務(wù)管理-獲取JIT數(shù)據(jù)總條目',
// trade相關(guān)API(待定)
// user相關(guān)API
'/api/internal/user/list': '權(quán)限管理-獲取外部用戶列表',
'/api/internal/custom/list': '權(quán)限管理-獲取外部客戶列表',
'/user/create': '權(quán)限管理-創(chuàng)建用戶',
'/user/update': '權(quán)限管理-修改用戶信息',
'/api/user/password': '權(quán)限管理-修改用戶密碼',
// 訂單列表相關(guān)API
'/order/api/v1/orderConfirmation': 'B2B交易管理-提交訂單',
'/order/api/v1/serviceApprove': 'B2B交易管理-確認(rèn)訂單',
'/order/api/v1/serviceRefuse': 'B2B交易管理-拒絕訂單',
'/order/api/v1/getDispatchSelectInfo': 'B2B交易管理-獲取訂單字典數(shù)據(jù)',
'/order/api/v1/import/productList': 'B2B交易管理-導(dǎo)入訂單數(shù)據(jù)',
'/order/api/v1/*/orderInformation': 'B2B交易管理-獲取訂單基本信息',
'/order/api/v1/*/customerCode': 'B2B交易管理-檢查客戶代碼是否存在',
'/order/api/v1/*/discount': 'B2B交易管理-導(dǎo)入訂單折扣',
'/order/api/v1/*/occupyInventory': 'B2B交易管理-導(dǎo)出占庫(kù)結(jié)果',
'/order/api/v1/createDispatch': 'B2B交易管理-提交發(fā)貨單',
'/order/api/vi/dispatchCancel': 'B2B交易管理-取消發(fā)貨單',
'/order/api/vi/*/orderCancel': 'B2B交易管理-取消訂單',
'/order/api/v1/dispatchApprove': 'B2B交易管理-同意發(fā)貨單',
'/order/api/v1/dispatchRefuse': 'B2B交易管理-拒絕發(fā)貨單',
'/order//api/v1/confirmSubmissionApproval': 'B2B交易管理-訂單提交審批',
'/order/api/v1/orderStatus': 'B2B交易管理-獲取訂單狀態(tài)',
'/bff/api/v1/dispatch/*': 'ODS管理-獲取發(fā)貨單基本信息',
'/bff/api/v1/receive/*': 'ODS管理-獲取收貨單基本信息',
'/bff/api/v1/vend-cust': 'ODS管理-獲取客商列表信息',
'/bff/api/v1/warehouses': 'ODS管理-實(shí)時(shí)獲取倉(cāng)庫(kù)信息',
'/bff/api/v1/dict/type': 'ODS管理-倉(cāng)庫(kù)類型查詢',
'/bff/api/v1/dispatch/_export': 'ODS管理-導(dǎo)出發(fā)貨單信息',
'/bff/api/v1/receive/_export': 'ODS管理-導(dǎo)出收貨單信息',
'/bff/api/v1/dict/type/_list': 'ODS管理-查詢字典數(shù)據(jù)',
'/bff/api/v1/dispatch/_page': 'ODS管理-查詢發(fā)貨單列表',
'/order/api/v1/orderList': 'B2B交易管理-查詢訂單列表',
'/order/api/v1/orderDetail': 'B2B交易管理-獲取訂單商品列表',
'/order/api/v1/orderDispatchInfo': 'B2B交易管理-獲取訂單發(fā)貨單信息',
'/order/api/v1/dispatchList': 'B2B交易管理-獲取訂單發(fā)貨單列表',
'/order/api/v1/confirm': 'B2B交易管理-修改占庫(kù)結(jié)果',
'/order/api/v1/toBeConfirmedDispatch': 'B2B交易管理-查看歷史發(fā)貨單信息',
'/order/api/v1/cumulativeState': 'B2B交易管理-獲取占庫(kù)結(jié)果信息'
}
export default changeName

其他的就不贅述了,中文轉(zhuǎn)化方面, 各人有各人的理解, 能達(dá)到效果就行.

js方式的統(tǒng)計(jì)也是類似的.有需要的話,評(píng)論留言,我后續(xù)傳上來(lái).

結(jié)語(yǔ)

Vue-matomo流量統(tǒng)計(jì)這塊,就算整理完成了, 實(shí)際項(xiàng)目中已經(jīng)正常使用,所以正常來(lái)講應(yīng)該不會(huì)出現(xiàn)問題. 加油, 各位

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue面包屑組件的封裝方法

    vue面包屑組件的封裝方法

    這篇文章主要為大家詳細(xì)介紹了vue面包屑組件的封裝方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 詳解Vue組件如何正確引用和使用外部方法

    詳解Vue組件如何正確引用和使用外部方法

    在開發(fā)Vue應(yīng)用時(shí),我們經(jīng)常需要在多個(gè)組件中復(fù)用一些通用的函數(shù)或方法,這些函數(shù)可能是我們自己編寫的工具函數(shù),也可能是從第三方庫(kù)中導(dǎo)入的,下面我們就來(lái)看看如何正確引用和使用外部方法吧
    2024-01-01
  • element-UI?el-table樹形數(shù)據(jù)?修改小三角圖標(biāo)方式

    element-UI?el-table樹形數(shù)據(jù)?修改小三角圖標(biāo)方式

    這篇文章主要介紹了element-UI?el-table樹形數(shù)據(jù)?修改小三角圖標(biāo)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Vue?Baidu?Map之自定義點(diǎn)圖標(biāo)bm-marker的示例

    Vue?Baidu?Map之自定義點(diǎn)圖標(biāo)bm-marker的示例

    這篇文章主要介紹了Vue?Baidu?Map之自定義點(diǎn)圖標(biāo)bm-marker,文中給大家介紹了vue-baidu-api地圖標(biāo)記點(diǎn)(自定義標(biāo)記圖標(biāo)),設(shè)置標(biāo)記點(diǎn)的優(yōu)先級(jí)問題,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-08-08
  • vue-devtools的安裝步驟

    vue-devtools的安裝步驟

    vue-devtools 是一款基于chrome游覽器的插件,用于調(diào)試vue應(yīng)用,這篇文章分步驟給大家介紹了vue-devtools的安裝方法,需要的朋友參考下吧
    2018-04-04
  • Vue使用Three.js創(chuàng)建交互式3D場(chǎng)景的全過程

    Vue使用Three.js創(chuàng)建交互式3D場(chǎng)景的全過程

    在現(xiàn)代Web開發(fā)中,通過在頁(yè)面中嵌入3D場(chǎng)景,可以為用戶提供更加豐富和交互性的體驗(yàn),Three.js是一款強(qiáng)大的3D JavaScript庫(kù),它簡(jiǎn)化了在瀏覽器中創(chuàng)建復(fù)雜3D場(chǎng)景的過程,本文將介紹如何在Vue中使用Three.js,創(chuàng)建一個(gè)簡(jiǎn)單的交互式3D場(chǎng)景,需要的朋友可以參考下
    2023-11-11
  • Vue 讀取HTMLCollection列表的length為0問題

    Vue 讀取HTMLCollection列表的length為0問題

    這篇文章主要介紹了Vue 讀取HTMLCollection列表的length為0問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Vue?Router?實(shí)現(xiàn)登錄后跳轉(zhuǎn)到之前想要訪問的頁(yè)面

    Vue?Router?實(shí)現(xiàn)登錄后跳轉(zhuǎn)到之前想要訪問的頁(yè)面

    這篇文章主要介紹了Vue?Router?實(shí)現(xiàn)登錄后跳轉(zhuǎn)到之前相要訪問的頁(yè)面,本文僅演示路由跳轉(zhuǎn)和導(dǎo)航守衛(wèi)相關(guān)代碼的實(shí)現(xiàn),不包含具體的權(quán)限驗(yàn)證和登錄請(qǐng)求,需要的朋友可以參考下
    2022-12-12
  • vue中使用Axios最佳實(shí)踐方式

    vue中使用Axios最佳實(shí)踐方式

    Axios?是一個(gè)基于?promise?的網(wǎng)絡(luò)請(qǐng)求庫(kù),可以用于瀏覽器和?node.js,Axios?使用簡(jiǎn)單,包尺寸小且提供了易于擴(kuò)展的接口,這篇文章主要介紹了vue中使用Axios最佳實(shí)踐,需要的朋友可以參考下
    2022-09-09
  • vue實(shí)現(xiàn)打卡功能

    vue實(shí)現(xiàn)打卡功能

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)打卡功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評(píng)論

云安县| 聂拉木县| 苍溪县| 茶陵县| 钦州市| 博罗县| 耒阳市| 北宁市| 乌鲁木齐市| 新化县| 武宁县| 和静县| 临汾市| 宣汉县| 民权县| 清丰县| 涞源县| 海晏县| 荔波县| 安义县| 略阳县| 冕宁县| 阿拉善左旗| 西贡区| 合水县| 万州区| 明溪县| 乡城县| 巩留县| 扎兰屯市| 海晏县| 铜山县| 山阳县| 漯河市| 冕宁县| 灵寿县| 黑龙江省| 嘉禾县| 昭觉县| 若羌县| 龙游县|