если мы обновляем страницу (не всегда), когда только один экземпляр пользователя редактирует документ, расширение базы данных не устанавливает уже отредактированный контент. Насколько я знаю, расширение базы данных должно фиксировать начальный редактируемый контент, даже если страница обновляется. Пожалуйста, поправьте, если я ошибаюсь. Код server.js выглядит следующим образом (с MySQL. Я уже пробовал с FireBase, SQLite как с памятью, так и с записью на диск и RethinkDB):
import * as dotenv from "dotenv"; dotenv.config(); import { Server } from "@hocuspocus/server"; import { Database } from "@hocuspocus/extension-database"; import mysql from "mysql2"; /* Should we convert it to Uint8Array or the DB extension doesit by default? */ //import { toUint8Array, fromUint8Array } from "js-base64"; import { Throttle } from "@hocuspocus/extension-throttle"; const pool = mysql.createPool({ connectionLimit: 100, host: process.env.DB_HOST, user: process.env.DB_USERNAME, password: process.env.DB_PASSWORD, database: process.env.DB_DATABASE, port: process.env.DB_PORT, debug: false, }); const server = Server.configure({ port: process.env.HOCUSPOCUS_PORT, extensions: [ new Throttle({ throttle: 200, banTime: 1, }), new Database({ fetch: async ({ documentName }) => { return new Promise((resolve, reject) => { console.log("Trying to fetch"); pool?.query( "SELECT data FROM ydocuments WHERE name = ? ORDER BY id DESC", [documentName], (error, row) => { if (error) { reject(error); } console.log("data: " + JSON.stringify(row)); if (row && row.data) { resolve(row.data); } else { resolve(null); } }, ); }); }, store: async ({ documentName, state }) => { pool?.query( "INSERT INTO ydocuments (name, data) VALUES (?, ?) ON DUPLICATE KEY UPDATE data = ?", [documentName, state, state], (error, result) => { if (error) { throw error; } console.log(`inserted/updated ${result.affectedRows}`); }, ); }, }), ], }); server.listen();
Кроме того, должны ли мы преобразовать его в Uint8Array или расширение БД делает это по умолчанию, как указано в коде?
Эта проблема была решена с помощью следующих рекомендаций по ссылкам на github.