Nuxt SurrealDB
旨在簡化 SurrealDB 使用的 Nuxt 模組。
快速設定
將模組安裝到您的 Nuxt 應用程式
npx nuxi module add nuxt-surrealdb
然後編輯您的預設資料庫預設,並在您的 Nuxt 應用程式中使用 Nuxt SurrealDB ✨
功能
- 📦 自訂資料庫預設,以便能夠在可組合式/逐功能的基礎上使用多個資料庫。
- 🚀 自訂內建的
$surrealFetch
和useSurrealFetch
,分別基於$fetch
和useFetch
。 - ⚡️ 透過
$surrealRPC
和useSurrealRPC
內建支援 RPC 端點。 - 🏗️ 內建 Nuxt 伺服器
useSurrealRPC
工具,具有伺服器端私有 DB 預設,用於與 SurrealDB 進行私有網路通訊。 - 💡 每個 RPC 方法都對應到一個
useSurrealDB
匯出的函式。 - 🌟 使用
useSurrealWS
可組合項內建支援與 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
位址。
然後,若要使用資料庫預設,您只需在每個主要可組合項的最後一個參數中設定它(從 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、自動連線和自動斷線預設會自動處理。資料會自動從 JSON
解析為 string
,無論是在輸入還是在 data
回傳中。如果可用,在 Websocket 連線時,它將採用先前使用者登入的任何 Auth token。資料庫預設和 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 目前,雖然
signin
和signup
方法可用,但它們僅限於目前的 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