diff --git a/backend/hw.md b/backend/hw.md new file mode 100644 index 0000000..f1c137e --- /dev/null +++ b/backend/hw.md @@ -0,0 +1,10 @@ +**①速度更快:** +Yarn 采用并行安装机制,能同时下载多个依赖包,且会缓存已下载的包,重复安装时无需重新下载,大幅提升安装速度。而早期 npm采用串行安装,速度较慢,虽然后续 npm 版本优化了性能,但 Yarn 仍在部分场景下保持优势。 +**②确定性安装:** +Yarn 会生成 yarn.lock 文件,精确记录每个依赖的版本、下载源和校验信息,确保不同环境下安装的依赖完全一致,避免因版本差异导致的 “在我这能运行” 问题。npm 虽然后来也引入了 package-lock.json,但 Yarn 更早实现且早期稳定性更优。 +**③更丰富的功能:** +Yarn 支持离线模式(yarn install --offline),可直接使用缓存安装依赖,适合网络环境差的场景。 +提供 yarn workspaces 功能,更便捷地管理多包项目(monorepo),而 npm 的 workspaces 支持相对滞后。 +支持 yarn audit 等安全检查命令,更早集成依赖漏洞扫描功能。 +**④更好的错误处理和日志:** +Yarn 的错误提示更清晰,安装过程中的日志输出更简洁,便于开发者定位问题。 diff --git a/backend/src/file.ts b/backend/src/file.ts index 7e77582..8c1ad90 100644 --- a/backend/src/file.ts +++ b/backend/src/file.ts @@ -74,4 +74,26 @@ router.get("/download", authenticate, (req, res) => { } }); +router.post("/delete", authenticate, (req, res) => { + const { room, filename } = req.body; + + if (!room || !filename) { + return res.status(422).send("422 Unprocessable Entity: Missing room or filename"); + } + + const filePath = path.resolve(baseDir, room, filename); + + try { + if (fs.existsSync(filePath)) { + fs.unlinkSync(filePath); // 删除文件 + return res.status(200).send("File deleted successfully"); + } else { + return res.status(404).send("404 Not Found: File does not exist"); + } + } catch (err) { + console.error(err); + return res.sendStatus(500); + } +}); + export default router; diff --git a/backend/src/user.ts b/backend/src/user.ts index a93bd91..80f357f 100644 --- a/backend/src/user.ts +++ b/backend/src/user.ts @@ -71,4 +71,23 @@ router.post("/register", async (req, res) => { } }); +router.get("/delete", authenticate, async (req, res) => { + try { + // 从 JWT 中获取当前用户 UUID(假设 authenticate 中间件已将解析后的 payload 挂载到 req.user) + const userId = req.user.uuid; + + // 调用 Hasura SDK 删除用户 + const result = await graphql.delete_user_by_pk({ uuid: userId }); + + if (!result.delete_user_by_pk) { + return res.status(404).send("404 Not Found: User not found"); + } + + return res.status(200).send("User deleted successfully"); + } catch (err) { + console.error(err); + return res.sendStatus(500); + } +}); + export default router;