You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Tauri项目中嵌入SurrealDB并使用其JavaScript库?

Tauri中嵌入SurrealDB并通过JavaScript库交互

问题概述

使用Tauri开发桌面应用,需要在客户端本地通过SurrealDB存储数据,支持两种方式:指定本地路径存储,或类似浏览器IndexedDB的存储方式。使用官方JavaScript库时遇到URL格式错误,同时需要实现单客户端读取能力并使用SurrealQL查询。

现有代码执行new Surreal('file//:C:/Programmering')时触发错误:

Uncaught InvalidURLProvided: The provided string is either not a URL or is a URL but with an invalid protocol!

错误原因

URL格式不符合规范:file//:C:/Programmering 缺少一个斜杠,正确的file协议URL格式应为file:///[路径](三个斜杠)。

解决方案

方案1:指定本地文件路径存储

  1. 修正URL格式:将路径改为file:///C:/Programmering
  2. 适配Tauri的本地路径:推荐使用Tauri的path API获取应用专属数据目录,避免硬编码系统路径,提升跨平台兼容性。

修正后的代码示例:

import Surreal from "surrealdb.js";
import { appDataDir } from "@tauri-apps/api/path";

export const getSurrealClient = async () => {
    // 获取Tauri应用的专属数据目录
    const dataPath = await appDataDir();
    // 构造正确的file协议URL
    const dbUrl = `file:///${dataPath.replace(/\\/g, "/")}`;
    
    const db = new Surreal(dbUrl);

    await db.signin({
        user: 'root',
        pass: 'root'
    });

    await db.use({ ns: 'namespace', db: 'mydb' });

    return db;
}

方案2:IndexedDB存储(类浏览器模式)

SurrealDB的JavaScript库支持local://协议,会自动将数据存储到IndexedDB中,无需指定本地文件路径,完全适配Tauri的WebView环境。

代码示例:

import Surreal from "surrealdb.js";

export const getSurrealClient = async () => {
    // 使用local协议自动存储到IndexedDB
    const db = new Surreal('local://');

    await db.signin({
        user: 'root',
        pass: 'root'
    });

    await db.use({ ns: 'namespace', db: 'mydb' });

    return db;
}

基础使用示例(单客户端读取+SurrealQL)

初始化客户端后,即可使用SurrealQL进行数据操作,满足单客户端读取需求:

// 插入数据
await db.query(`
    INSERT INTO user SET name = 'John Doe', age = 30;
`);

// 查询数据
const result = await db.query(`
    SELECT * FROM user WHERE age > 25;
`);
console.log(result[0].result);

内容的提问来源于stack exchange,提问作者Ólavur Nón

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 10:13:10