L.Leverage Learn从第一行代码,到读懂真实后端查看项目源码

走进 Leverage OJ / 第 8 课

从浏览器请求走进 Node.js

建立浏览器、服务端、HTTP 与 JSON 的基本图景,用 OJ 提交问题理解后端做什么。

◷ 预计 9 分钟 · 面向初学者

前几课我们用 JavaScript 和 TypeScript 描述数据、函数与异步过程。现在把它们放进一个真实场景:在 OJ 页面按下“提交”,代码并不会直接从浏览器跳进评测机。浏览器是运行网页的客户端,负责收集题目、代码和语言等输入;服务端运行应用程序,负责接收请求、确认用户身份、检查数据、保存提交,并安排后续工作。

浏览器与服务端通常通过 HTTP 通信。一次请求包含方法、路径、标头和可选正文;响应会带回状态码与数据。例如,提交代码可以用 POST 表示“创建一项资源”,把数据放在正文中。成功接收和程序答对是两回事:服务端可能先确认创建了提交,评测结果稍后才产生。GET 常用于读取,例如查询提交状态。

正文常用 JSON 表达。它看起来像 JavaScript 对象,但 JSON 是跨程序交换的文本格式:对象键名和字符串都要用双引号。浏览器中的对象需要序列化成文本才能发送,收到的响应也要解析后才能作为 JavaScript 数据使用。JSON 本身不证明内容有效;恶意或旧版本客户端都可能发送缺字段、错类型或超长代码。

服务端代码可以由 Node.js 运行。它提供 JavaScript 运行环境及网络、文件等服务端能力;框架则帮团队组织路由和业务代码。Leverage OJ 的后端使用 NestJS:收到请求后由 Controller 找到对应处理入口,再把具体业务交给 Service。前端可以限制输入方便用户,但服务端仍必须独立校验,因为客户端不是可信边界。

把流程想成前台收件:浏览器交来一份格式化的请求,HTTP 负责送达,后端核对并登记,评测则是之后的工作。理解这个边界后,再看代码时就能分辨哪些语句属于网页,哪些在服务器执行,也不会把“HTTP 请求成功”误读为“答案正确”。

小练习

有人发送 POST 请求并收到成功响应,这是否说明代码已经通过所有测试?请求中的 JSON 又是什么?

**答案:**不能。成功响应只说明该接口完成了响应所代表的操作;是否通过要看评测结果。JSON 是请求或响应中的数据文本,不等同于浏览器里的 JavaScript 对象。

去真实仓库看看

在固定版本的 submission.controller.ts 创建提交入口 可以看到,路由方法接收用户与请求 DTO,再调用 Service。下一课拆解 NestJS 怎样提供这些结构。

互动练习:认识 HTTP 请求

HTTP 请求中,哪一部分通常用来表示要访问的资源路径?

选择一个答案

✓
这一课,你已经能……

浏览器把 HTTP 请求发给服务端;Node.js 能运行 JavaScript 后端,JSON 是常见的数据交换格式。