通过 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 ✨

特性

  • 📦 自定义数据库预设,以便能够在可组合的/每个函数的基础上使用多个数据库。
  • 🚀 基于 $fetchuseFetch 分别构建的自定义内置 $surrealFetchuseSurrealFetch
  • ⚡️ 通过 $surrealRPCuseSurrealRPC 内置对 RPC 端点的支持。
  • 🏗️ 内置 Nuxt 服务器 useSurrealRPC 工具,带有用于与 SurrealDB 进行私有网络通信的服务器端私有数据库预设。
  • 💡 每个 RPC 方法都映射到一个导出的 useSurrealDB 函数。
  • 🌟 使用 useSurrealWS 可组合项内置对通过 Websockets 与 RPC 方法进行通信的支持。

数据库预设

可以通过 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://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 地址特别有用。

然后,要使用数据库预设,您只需在每个主要可组合项的最后一个参数中设置它(从 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 连接时,它将使用先前用户登录中的任何 Auth 令牌。数据库预设和 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