透過超過 100 個技巧學習 Nuxt!

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 ✨

功能

  • 📦 自訂資料庫預設,以便能夠在 composable/每個函數的基礎上使用多個資料庫。
  • 🚀 基於 $fetchuseFetch 分別自訂內建的 $surrealFetchuseSurrealFetch
  • ⚡️ 透過 $surrealRPCuseSurrealRPC 內建支援 RPC 端點
  • 🏗️ 內建 Nuxt 伺服器 useSurrealRPC 工具,具有伺服器端私有資料庫預設,可與 SurrealDB 進行私有網路通訊。
  • 💡 每個 RPC 方法都對應到一個 useSurrealDB 輸出的函數。
  • 🌟 內建支援使用 useSurrealWS composable 與 RPC 方法進行 Websockets 通訊。

資料庫預設

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

!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://127.0.0.1:8000',
          ws: 'ws://127.0.0.1:8000'
        }
      }
    }
  },
  // ...
})

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

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

然後,要使用資料庫預設,您只需在每個主要 composable 的最後一個參數中設定即可(從 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 composable 公開一個 Websocket 連接,以處理與 SurrealDB 的即時通訊。它在底層使用 @vueuse/coreuseWebsocket,這表示 SSR、自動連線和自動斷線預設會自動處理。資料會自動從 JSON 解析為 string,無論是在輸入還是 data 回傳中。如果可用,在 Websocket 連線時,它會使用先前使用者登入的任何 Auth token。資料庫預設和 Websocket 選項可以作為 composable 的主要引數。

以下是 Websocket composable 提供的主要方法列表

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 composable 進行 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