# DenoServer **Repository Path**: nbqc233/deno-server ## Basic Information - **Project Name**: DenoServer - **Description**: Deno2.0 + Express+ MongoDB + SocketIO + TypeScript - **Primary Language**: TypeScript - **License**: GPL-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-11-17 - **Last Updated**: 2025-02-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 待办 ### 多用现成方案和 package - [x] 使用日志库 - [x] ~~验证码过期/无效提示~~(因为过期验证码会定时清理 故不做单独提示 改统一提示) - [x] 增/改腾讯云验证码模板 有效时间 15min - [x] 分路由模块 - [x] 错误处理中间件 - [x] 各种提示信息格式/code 提示中间件 - [x] 发送验证码前验证邮箱格式 - [x] 用 async/await 和 try/catch 解除回调 - [x] 邮箱验证码登录 - [x] 聊天记录存储 - [x] 重写socket的room管理 talk/chat - [x] 发送消息时更新最后一条消息 - [x] 发消息者自动已读 - [x] 获取未读消息数量需要优化 集中到一个请求中全部room获取 - [x] 在getrooms时返回 最后一条消息 和 未读消息数量 - [ ] 获取聊天记录时不需要返回roomId和readBy - [ ] socket私聊 - [ ] room操作权限 权限管理 鉴权中间件 - [ ] token自动刷新 老token获取新token - [ ] 找回/重置密码 - [ ] 客户端刷新保持冷却倒计时 | 数据保持/持久化(时间戳) (注册表单) - [ ] 多次密码错误 锁定账号一段时间 --- ## jwt过期时间格式 1. 秒数 - '3600' (1h) 2. 字符串 - s: 秒 - m: 分钟 - h: 小时 - d: 天 - w: 周 - M: 月 - y: 年 3. ISO 8601 - '2024-12-31T23:59:59Z' - 这表示 JWT 会在指定的时间(2024年12月31日23:59:59UTC)过期 --- ## 通用响应参数说明 (1)响应 ```json { "status": 200, "message": "提示信息", "data": null } ``` (2)status字段说明 - 200: 成功 - 400: 客户端(参数)错误 - 401: 未登录 - 403: 无权限 - 404: not found - 500: 服务端错误 --- ## 错误状态响应 ```json { "status": 500, "message": "提示信息", "data": { "name": "错误名称", "errmsg": "错误消息" } } ``` --- ## 常见的 MongoServerError 错误代码 以下是一些常见的错误代码及其含义: | 错误代码 (`code`) | 错误类型 | 描述 | | ----------------- | ------------------------- | -------------------------------------------------------------- | | `2` | BadValue | 提供的参数无效。 | | `11000` | DuplicateKey | 唯一键冲突,例如尝试插入重复的 `_id` 或其他唯一索引字段值。 | | `121` | DocumentValidationFailure | 文档未通过验证规则(例如 Schema 校验失败)。 | | `50` | ExceededTimeLimit | 查询或操作超过了定义的时间限制。 | | `11600` | InterruptedAtShutdown | 操作在服务器关机过程中被中断。 | | `13435` | NotPrimaryNoSecondaryOk | 请求写入到一个非主节点,而该节点未启用 `secondaryOk` 标志。 | | `10003` | NamespaceNotFound | 指定的数据库或集合不存在。 | | `13` | Unauthorized | 当前用户没有足够的权限执行操作。 | | `112` | WriteConflict | 多个写操作冲突,导致写入失败(通常发生在事务或并发写操作中)。 | | `8000` | IncompatibleServerVersion | 客户端和服务器版本不兼容。 | | `24` | CursorNotFound | 光标超时或被显式关闭,无法继续遍历结果集。 | ### 更多参考: - [自管理部署的退出代码和状态](https://www.mongodb.com/zh-cn/docs/manual/reference/exit-codes/) - [错误代码](https://www.mongodb.com/zh-cn/docs/manual/reference/error-codes/) --- ## web常用状态码 ### 1xx - 信息性状态码 - ‌**100 Continue**‌:表示目前为止一切正常,客户端可以继续发送请求或者忽略这个响应。 - ‌**101 Switching Protocols**‌:服务器根据客户端的请求切换协议。 ### 2xx - 成功状态码 - ‌**200 OK**‌:请求成功,一般用于 GET 和 POST 请求。 - ‌**201 Created**‌:请求成功并且服务器创建了新的资源。 - ‌**202 Accepted**‌:服务器已接受请求,但尚未处理。 - ‌**203 Non-Authoritative Info**‌:服务器已成功处理了请求,但返回的信息可能来自另一来源。 - ‌**204 No Content**‌:服务器成功处理了请求,但没有返回任何内容。 - ‌**205 Reset Content**‌:服务器成功处理了请求,但没有返回任何内容。 - ‌**206 Partial Content**‌:服务器成功处理了部分 GET 请求。 ### 3xx - 重定向状态码 - ‌**301 Moved Permanently**‌:对象已永久移走,即永久重定向。 - ‌**302 Found**‌:对象已临时移走,即临时重定向。 - ‌**303 See Other**‌:表示请求的资源存在另一个 URI,应使用 GET 方法定向获取请求的资源。 - ‌**304 Not Modified**‌:自从上次请求后,请求的网页未修改过。 - ‌**307 Temporary Redirect**‌:临时重定向。 ### 4xx - 客户端错误状态码 - ‌**400 Bad Request**‌:请求有语法错误,服务器无法理解。 - ‌**401 Unauthorized**‌:请求需要用户验证。 - ‌**403 Forbidden**‌:服务器理解请求客户端的请求,但是拒绝执行此请求。 - ‌**404 Not Found**‌:服务器无法找到请求的资源。 - ‌**405 Method Not Allowed**‌:客户端请求中的方法被禁止。 - ‌**406 Not Acceptable**‌:服务器无法根据客户端请求的内容特性完成请求。 - ‌**408 Request Timeout**‌:服务器等待客户端发送的请求时间过长,超时。 - ‌**410 Gone**‌:请求的资源已被永久删除,服务器不再有此资源。 - ‌**415 Unsupported Media Type**‌:服务器无法处理请求附带的媒体格式。 ### 5xx - 服务器错误状态码 - ‌**500 Internal Server Error**‌:服务器内部错误,无法完成请求。 - ‌**501 Not Implemented**‌:服务器不支持请求的功能,无法完成请求。 - ‌**502 Bad Gateway**‌:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。 - ‌**503 Service Unavailable**‌:服务器暂时无法处理客户端的请求。 - ‌**504 Gateway Timeout**‌:网关超时。 - ‌**505 HTTP Version Not Supported**‌:HTTP版本不受支持‌ --- ## git格式规范 在编写 Git 提交消息时,遵循良好的规范可以提高代码版本管理的效率。以下是建议的格式和一些实用的模板: ### **1. 格式规范** 建议使用 [Conventional Commits](https://www.conventionalcommits.org/) 标准,分为三部分: 1. **类型(type)**: 表示提交的目的。 2. **范围(scope)**: 可选,说明具体影响的模块或功能。 3. **描述(description)**: 简要说明修改内容。 **基本格式:** ``` (): [空行] [body](可选) [空行] [footer](可选) ``` ### **2. 常用的提交类型** | 类型 | 含义 | | ---------- | ---------------------------------------------------- | | `feat` | 新增功能。 | | `fix` | 修复 Bug。 | | `docs` | 更新文档,仅限文档相关更改。 | | `style` | 代码格式修正(如空格、格式化等),不影响功能或逻辑。 | | `refactor` | 代码重构,既不新增功能也不修复 Bug。 | | `test` | 添加或更新测试代码。 | | `chore` | 更新构建流程或工具等配置文件,不影响代码逻辑。 | | `perf` | 性能优化。 | | `revert` | 回滚提交。 | ### **3. 提交消息示例** #### 新增功能 ``` feat(user): 添加用户注册接口 新增用户注册接口,并支持邮箱验证功能。 ``` #### 修复 Bug ``` fix(auth): 修复登录时密码验证失败的问题 原因:由于加密算法更改,导致旧密码无法匹配。 修复措施:调整加密验证逻辑,确保兼容旧密码。 ``` #### 更新文档 ``` docs(readme): 更新 README 文件,增加安装说明 ``` #### 代码格式修正 ``` style(api): 调整 API 代码的缩进和注释格式 ``` #### 性能优化 ``` perf(query): 优化数据库查询,减少响应时间 将多表查询优化为一次性聚合操作,提高性能。 ``` #### 回滚提交 ``` revert: 回滚 commit 12345abc 原因:引入了严重的兼容性问题。 ``` ### **4. 写提交消息的注意事项** 1. **简洁明了**:标题(第一行)应在 50 字以内,首字母小写,避免句号结尾。 2. **保持一致性**:全团队遵循相同规范。 3. **详细描述**:正文部分用来补充背景、动机或修复细节,长度不限。 通过遵循这些规则,你的提交记录将更加规范易读,方便团队协作和代码维护!