Skip to content

Регистрация плагина Vue, модуль Nuxt и использование

Регистрация плагина Vue

Передайте объект опций вторым аргументом в app.use():

typescript
app.use(NetworkDashboard, {
  enabled: true,
  maxLogs: 1000,
  devOnly: false,
  persistToStorage: false,

  interceptors: {
    fetch: true,
    xhr: true,
    websocket: true,
    sse: true,
  },

  filters: {
    excludeUrlPattern: /\/(health|metrics|favicon)/,
    methods: ['GET', 'POST', 'PUT', 'DELETE'],
  },

  sanitization: {
    sensitiveHeaders: ['authorization', 'x-api-key'],
    sensitiveFields: ['password', 'token', 'secret'],
    maskFields: ['email', 'phone'],
  },

  callbacks: {
    onLog: (entry) => console.log('[net]', entry.url),
    onError: (err) => console.error('[net error]', err),
  },

  // Настройте хоткей для показа/скрытия панели отладчика
  ui: {
    hotkey: 'd',
    hotkeyModifiers: { ctrl: true, shift: true }, // Ctrl+Shift+D
  },
})

Модуль Nuxt 3

Установите и добавьте в modules:

ts
// nuxt.config.ts
export default defineNuxtConfig({
  modules: ['vue-network-dashboard/nuxt'],
  networkDashboard: {
    devOnly: true,
    maxLogs: 500,
    ui: { hotkey: 'd', hotkeyModifiers: { ctrl: true, shift: true } },
  },
})

<NetworkDebugger> и useNetworkDashboard() авто-импортированы — ручной import не требуется. Плагин работает только на клиенте, так что SSR не затрагивается.

Использование

Composition API

vue
<script setup lang="ts">
import { useNetworkDashboard } from 'vue-network-dashboard'

const {
  logs, // Ref<UnifiedLogEntry[]> — реактивный массив логов
  totalRequests, // Ref<number>
  totalErrors, // Ref<number>
  averageDuration, // Ref<number> — миллисекунды
  totalDataSent, // Ref<number> — байты
  totalDataReceived, // Ref<number> — байты

  clear, // () => void
  enable, // () => void
  disable, // () => void
  isEnabled, // () => boolean

  getStats, // () => NetworkStats
  getStatsSummary, // () => string (человекочитаемая)

  getLogsByType, // (type: 'http'|'websocket'|'sse') => UnifiedLogEntry[]
  getLogsByUrl, // (pattern: string | RegExp) => UnifiedLogEntry[]
  getLogsByStatus, // ([min, max]: [number, number]) => UnifiedLogEntry[]
  getLogsByMethod, // (method: string) => UnifiedLogEntry[]
  getErrorLogs, // () => UnifiedLogEntry[]
  queryLogs, // (filters: QueryFilters) => UnifiedLogEntry[]

  subscribe, // (cb: (entry) => void) => () => void  (возвращает функцию отписки)
  export: exportLogs, // (format?: 'json' | 'csv') => string
} = useNetworkDashboard()
</script>

<template>
  <div>
    <p>Requests: {{ totalRequests }} | Errors: {{ totalErrors }} | Avg: {{ averageDuration }}ms</p>
    <button @click="clear()">Clear</button>
    <ul>
      <li v-for="log in logs" :key="log.id">
        {{ log.method }} {{ log.url }} — {{ log.http?.status }} ({{ log.duration }}ms)
      </li>
    </ul>
  </div>
</template>

Options API

vue
<template>
  <div>
    <p>Total Requests: {{ $networkDashboard.totalRequests }}</p>
    <p>Errors: {{ $networkDashboard.totalErrors }}</p>
    <button @click="$networkDashboard.clear()">Clear Logs</button>
  </div>
</template>

<script>
export default {
  mounted() {
    console.log(this.$networkDashboard.getStatsSummary())

    this._unsubscribe = this.$networkDashboard.subscribe((entry) => {
      if (entry.error.occurred) {
        console.warn('Request failed:', entry.url)
      }
    })
  },
  beforeUnmount() {
    this._unsubscribe?.()
  },
}
</script>

Без Vue (автономно)

Основной логгер можно использовать независимо от Vue, например в тестовом окружении или не-Vue веб-приложении:

typescript
import { createNetworkDashboard } from 'vue-network-dashboard'

const logger = createNetworkDashboard({
  maxLogs: 200,
  interceptors: { fetch: true, xhr: false, websocket: false, sse: false },
})

logger.enable()

const stats = logger.getStats()
console.log(stats.totalRequests)

logger.disable()