[]
        
首页
开发者学堂
文档
论坛
市场
生态机会
活动
在线咨询 立即试用
(Showing Draft Content)

数据库适配器

本教程基于《协同编辑 快速开始》教程,介绍如何配置和使用数据库适配器。我们将以SQLite3适配器为例,通过实操演示配置步骤。

前置条件

具体步骤

步骤1:安装依赖

npm install sqlite3 @grapecity-software/js-collaboration-ot-sqlite

步骤2:修改server.js

将基础教程中的代码替换为以下内容:

import express from 'express';
import http from 'http';
import { Server } from '@grapecity-software/js-collaboration';
import * as OT from '@grapecity-software/js-collaboration-ot';
import { type } from '@grapecity-software/spread-sheets-collaboration';
import sqlite3 from 'sqlite3';
import { SqliteDb } from '@grapecity-software/js-collaboration-ot-sqlite';

// 注册类型
OT.TypesManager.register(type);

const app = express();
const httpServer = http.createServer(app);
const server = new Server({ httpServer });
const port = 8080;

// 初始化数据库
const db = new sqlite3.Database("./docs.db");
const sqliteDbAdapter = new SqliteDb(db);
// 初始化OT文档服务
const documentServices = new OT.DocumentServices({ db: sqliteDbAdapter });
server.useFeature(OT.documentFeature(documentServices));

// 初始化OT文档服务
app.use(express.static('public'));

// 启动服务器
httpServer.listen(port, () => {
    console.log(`服务器在端口 ${port} 监听`);
    console.log(`<http://127.0.0.1:${port}/index.html`);
});

步骤3:初始化数据库

在根目录下创建init-database.js文件:

import sqlite3 from "sqlite3";
const db = new sqlite3.Database("./docs.db");
async function initSqliteDataTables(db) {
    const run = (sql) => {
        return new Promise((resolve, reject) => {
            db.run(sql, (e) => (e ? reject(e) : resolve()));
        });
    };
    await run(
        `CREATE TABLE IF NOT EXISTS documents (
            id TEXT PRIMARY KEY,
            type TEXT NOT NULL,
            version INTEGER NOT NULL,
            snapshot_version INTEGER NOT NULL
        )`
    );
    await run(
        `CREATE TABLE IF NOT EXISTS operations (
            doc_id TEXT NOT NULL,
            version INTEGER NOT NULL,
            operation TEXT NOT NULL,
            PRIMARY KEY (doc_id, version),
            FOREIGN KEY (doc_id) REFERENCES documents (id) ON DELETE CASCADE
        )`
    );
    await run(
        `CREATE TABLE IF NOT EXISTS snapshot_fragments (
            doc_id TEXT NOT NULL,
            fragment_id TEXT NOT NULL,
            data TEXT NOT NULL,
            PRIMARY KEY (doc_id, fragment_id),
            FOREIGN KEY (doc_id) REFERENCES documents (id) ON DELETE CASCADE
        )`
    );
}
// 调用初始化函数
initSqliteDataTables(db);

执行该文件以初始化数据库表,注意:仅需在首次执行或重置数据库后进行数据库初始化操作。

node init-database.js

步骤4:构建并运行

  1. 构建客户端代码

npm run build
  1. 启动服务器

npm run start

后续步骤

若想了解如何实现自定义数据库,请查看:自定义数据库适配器