Files
scratch-gui/docs/sccn-backend.md

4.3 KiB
Raw Permalink Blame History

中社后端接入

编辑器、播放器和嵌入页使用本站作品 ID。社区主站 Frontend 不在本次改动范围。

本地开发

  1. 在 Backend 配置数据库并执行 npm ci、npm run migrate,确认迁移 008 已应用。
  2. Backend 的 ALLOWED_ORIGINS 加上 http://localhost:8601;保留已有主站 Origin。
  3. 在 Backend 执行 npm run assets:import -- --gui ../scratch-gui,再加 --check 校验素材完整。
  4. 启动 Backend(默认 3000),在本仓库执行 npm ci 和 npm start。 如果安装时跳过了 lifecycle scripts,先执行 npm run prepublish 下载并校验 micro:bit 资源。
  5. 打开 http://localhost:8601/editor.html,点右上角“登录以保存”,使用后端已注册账号。 本页面不创建账号,注册沿用主站。

开发构建默认 API 为 http://localhost:3000/api。可在启动或构建时用环境变量指定,例如:

SCCN_API_BASE=https://api.example.com/api npm start
SCCN_API_BASE=https://api.example.com/api NODE_ENV=production npm run build

生产未指定时默认同源 /api,需反向代理到 Backend。API 地址不能由 URL 参数覆写。 Cookie 请求始终携带 credentials;跨站部署需要后端启用 HTTPS、Secure、SameSite=None, 并允许编辑器 Origin。浏览器限制第三方 Cookie 时优先部署同源反向代理。

使用流程

  • 登录恢复后,编辑中的新作品自动建立私有草稿;修改后 30 秒自动保存。
  • 文件菜单“立即保存”或 Ctrl/Cmd+S 保存到服务器;未登录时仍可下载到本地。
  • “保存副本”把当前编辑状态保存为新 ID,不修改原作;版本冲突后也可用它保留修改。
  • 右上角“我的作品”分页列出自己的作品;切换时对未保存修改提示确认。
  • editor.html#123 打开作品 123;刷新后读取后端最新版本、标题和素材。
  • 保存本地导入或 project_url 导入的项目后,清除导入参数,刷新时使用本站副本。
  • 本地 .sb3 导入/导出、打包功能保留。默认角色、背景、库素材和字体也会首次上传到本站, 不会误用 Scratch 的 asset.clean 标记跳过上传;当前页面成功上传过的素材不重复上传。
  • 素材库缩略图、角色全部造型、声音预览与添加统一读取本站;不再回退到 Scratch 官方素材站。
  • 后端未提供云变量服务,因此不接入 TurboWarp 公共云变量服务器,避免本站 ID 与官方 ID 混用。

保存与错误处理

保存使用与实际加载内容绑定的 revision。恢复登录、窗口重新获得焦点时刷新权限, 不会替换本地 revision,因此不会把旧作品当作最新版本覆盖服务器。401 提示重新登录; 409 保留编辑内容,提示下载备份或保存副本。私有作品未登录时显示登录与重新加载入口。 上传或保存失败不会显示保存成功;保存期间继续修改的内容保持未保存状态。

后端保存后的缩略图由 VM 截图上传。标题修改同样标记作品已变更并参与保存。 复制/改编的新作品默认私有;本次未增加发布/审核、删除、社区页面或注册流程。

验证

npx jest --runInBand test/unit/sccn test/unit/reducers/project-state-reducer.test.js
npm run test:unit
npm run build

接入与状态机 53 项测试、既有 addon 33 项测试通过。浏览器联调使用隔离 MySQL 9.7 数据库, 验证登录/退出、新建、标题与快捷键保存、刷新恢复角色与背景、副本、我的作品、私有访问限制和 并发冲突后另存副本。未使用业务库,未部署生产。

旧的 test/unit/util/project-saver-hoc.test.jsx 与 project-fetcher-hoc.test.jsx 不在默认测试脚本中: 当前 Jest 配置缺 DOM 环境及 webpack inline-loader 映射,直接执行会失败;本轮未扩展该旧测试环境。

本次新增及其余改动源码 lint 通过;菜单文件仍有 24 项既存 lint 错误(HEAD 为 25 项),未做无关清理。

素材与生产部署

完整的素材导入、离线迁移、Nginx/systemd 配置、升级和备份步骤见 Backend 部署说明。 首次部署必须先导入素材,再发布 GUI;本轮已导入 1,305 个素材并完成完整性校验。