surrealdb
nuxt-surrealdb

一個旨在簡化 SurrealDB 使用的 Nuxt 模組

nuxt-surrealdb

Nuxt SurrealDB

npm version npm downloads License Nuxt

一個旨在簡化 SurrealDB 使用的 Nuxt 模組。

快速設定

將模組安裝到您的 Nuxt 應用程式中

npx nuxi module add nuxt-surrealdb

然後編輯您的 預設資料庫預設 並在您的 Nuxt 應用程式中使用 Nuxt SurrealDB ✨

功能

  • 📦 自定義資料庫預設,以便能夠基於可組合/按函式使用多個數據庫。
  • 🚀 自定義內建的 $surrealFetchuseSurrealFetch,分別基於 $fetchuseFetch
  • ⚡️ 透過 $surrealRPCuseSurrealRPC 內建支援 RPC 端點
  • 🏗️ 內建 Nuxt 伺服器 useSurrealRPC 工具,帶有伺服器端私有資料庫預設,用於與 SurrealDB 進行私有網路通訊。
  • 💡 每個 RPC 方法都對映到 useSurrealDB 匯出的函式。
  • 🌟 內建支援使用 useSurrealWS 可組合項進行帶有 RPC 方法的 Websocket 通訊。

資料庫預設

可以透過 nuxt.config.ts.env 來自定義 default 預設或定義您自己的資料庫預設。

!NOTE 當將變數傳遞給自定義預設(如下面的 shop)時,重要的是在 nuxt.config.ts 中將其初始化為空物件。

NUXT_PUBLIC_SURREALDB_DATABASES_SHOP_HOST="https://example.com"
NUXT_PUBLIC_SURREALDB_DATABASES_SHOP_WS="wss://example.com"
NUXT_PUBLIC_SURREALDB_DATABASES_SHOP_NS="surrealdb"
NUXT_PUBLIC_SURREALDB_DATABASES_SHOP_DB="docs"
NUXT_PUBLIC_SURREALDB_DATABASES_SHOP_SC="user"

# To add authentication server side (this does not override the client's token)
# As a Bearer
NUXT_SURREALDB_DATABASES_SHOP_AUTH="mySuperLongBearerToken"
# Or as an object
NUXT_SURREALDB_DATABASES_SHOP_AUTH_USER="root"
NUXT_SURREALDB_DATABASES_SHOP_AUTH_PASS="root"
export default defineNuxtConfig({
  modules: ['nuxt-surrealdb'],
  surrealdb: {
    databases: {
      default: {
        host: 'https://example.com',
        ws: 'wss://example.com',
        NS: 'production',
        DB: 'website'
      },

      crm: {
        host: 'https://crm.example.com',
        ws: 'wss://crm.example.com',
        NS: 'demo',
        DB: 'crm',
        // The following auth example is exposed client side!
        auth: 'mySuperLongBearerToken'
      },

      shop: {},
    },
    server: { // the following add auth only server side
      databases: {
        default: {
          auth: '', // then edit it via NUXT_SURREALDB_DATABASES_DEFAULT_AUTH
          // OR
          auth: {
            user: '', // then edit it via NUXT_SURREALDB_DATABASES_DEFAULT_AUTH_USER
            pass: '' // then edit it via NUXT_SURREALDB_DATABASES_DEFAULT_AUTH_PASS
          }
        }
      }
    }
  },
  // To change a db preset during development it is best to do the following
  $development: {
    surrealdb: {
      databases: {
        default: {
          host: 'https://:8000',
          ws: 'ws://:8000'
        }
      }
    }
  },
  // ...
})

!NOTE 如果您想在開發和生產環境之間使用不同的資料庫預設,請使用 Nuxt 的原生 $development$production 屬性 在您的 nuxt.config.ts 中,如上例所示。

也可以在伺服器端擴充套件或更改資料庫屬性(如上面的 surrealdb.server.databases.default.auth)。這對於更傳統的資料庫身份驗證方法特別有用,無需在客戶端暴露憑據,或者在私有網路中使用不同的 host 地址。

然後,要使用資料庫預設,您只需在每個主要可組合項的最後一個引數中設定它(從 useSurrealDB 解構的函式也支援此覆蓋)。

// all the functions destructured will be executed against the CRM database
const { query, select } = useSurrealDB({
  database: 'crm',
})

// only the following select will be made against the default database
const { data } = await select('products', {
  database: 'default',
})

// you could also define a one-time only preset
const { data } = await sql(
  'SELECT * FROM products WHERE price < $maxPrice;',
  { maxPrice: 500 },
  {
    database: {
      host: 'https://surrealdb.example.com',
      NS: 'demo',
      DB: 'shop',
    },
  },
)

RPC 方法

主要的 useSurrealDB 匯出了許多直接與 RPC 端點通訊的函式。每個函式都有兩種變體,一種以 $ 開頭,另一種不帶。第一個基於 $surrealRPC,它提供了純函式,而後者使用 useSurrealRPC,利用了 useSurrealFetch(因此也利用了 useFetch)。

這裡是完整列表

const {
  authenticate, // $authenticate
  create,       // $create
  delete,       // $delete
  info,         // $info
  insert,       // $insert
  invalidate,   // $invalidate
  merge,        // $merge
  patch,        // $patch
  query,        // $query
  remove,       // $remove
  select,       // $select
  signin,       // $signin
  signup,       // $signup
  sql,          // $sql
  update,       // $update
  version,      // $version
} = useSurrealDB()

!NOTE sql 方法是 query 的別名,而 version 使用其 HTTP 端點

RPC Websocket

useSurrealWS 可組合項暴露了一個 Websocket 連線,用於處理與 SurrealDB 的即時通訊。它在底層使用了 @vueuse/core 中的 useWebsocket,這意味著 SSR、自動連線和自動斷開連線預設情況下是自動處理的。資料在輸入和 data 返回中都會自動從 JSON 解析為 string。如果可用,在 Websocket 連線時,它將從先前的使用者登入中獲取任何身份驗證令牌。資料庫預設和 Websocket 選項作為可組合項的主要引數提供。

下面是 Websocket 可組合項中可用的主要方法列表

const {
  authenticate,
  close,
  create,
  data,
  set,      // alias for `let`
  info,
  insert,
  invalidate,
  kill,
  let,
  live,
  merge,
  open,
  patch,
  query,
  remove,
  rpc,
  select,
  send,
  signin,
  signup,
  sql,      // alias for `query`
  status,
  unset,
  update,
  use,
  ws,
} = useSurrealWS()

!WARNING 目前,雖然 signinsignup 方法可用,但它們僅限於當前的 Websocket 連線。因此,如果需要在此 Websocket 連線之外進行身份驗證,建議使用主要的 useSurrealAuth 可組合項進行 SCOPE 使用者身份驗證。


貢獻

本地開發
# Install dependencies
npm install

# Generate type stubs
npm run dev:prepare

# Develop with the playground
npm run dev

# Build the playground
npm run dev:build

# Run ESLint
npm run lint

# Run Vitest
npm run test
npm run test:watch

# Release new version
npm run release