# 让 Python FDE 读懂 Express 的一门开源课程

> The Odin Project 的 NodeJS 课程讲路由、认证、ORM 和测试，老手不必慢学，但要按顺序。

原文: https://fdetimes.net/zh/books-courses/odin-project-javascript-node-python-fde/

设想你在客户现场的第一周。你带来的 AI 系统用 Python 编写，而客户的整个后端都跑在 Express 和 Node.js 上。要把两者接起来，你得读懂他们的路由、中间件和用户认证方式。没有人会等你学完一门长课程再开工。

所以，Python 背景的前线部署工程师（FDE）值得关注 The Odin Project，一套开源的全栈 Web 开发课程。它的 Full Stack JavaScript 路径里有一门专门的 NodeJS 课程，涵盖 Express、PostgreSQL、认证、ORM、API 和测试，正是你打开客户 Node 代码库时最可能碰到的内容。

有几年经验的工程师不必按新手节奏逐课学完。关键是知道哪一部分对应哪项工作，以及从哪里入手。

## 背后是谁，为什么这一点重要

Erik Trautman 于 2013 年创立了 The Odin Project。项目的关于页面写明，课程由志愿者团队维护并持续改进，网站和全部课程都是开源的。GitHub 仓库也直接说明，项目依赖社区贡献。

学习者能直接从这种模式中受益。课程是开放的，任何一课你都可以阅读、修改并提交 pull request。遇到卡点时，还有同样由志愿者运营的 Discord 社区，可以向走过这条路的人提问。

## 七门课程，一条值得遵守的建议

Full Stack JavaScript 路径共有七门课程：Intermediate HTML/CSS、JavaScript、Advanced HTML/CSS、React、Databases、NodeJS 和 Getting Hired。路径页面建议按列出的顺序学习。

Python 工程师容易想直接跳到 NodeJS。不要跳过 JavaScript 课程。这门课从构建动态、可交互的网页讲起，随后涵盖 async、测试、OOP、ES6 模块、npm、Webpack 和数据结构。Python 开发者第一次读 Node 代码时，通常就卡在 async 和模块上。

如果你的工作以后端为主，HTML/CSS 和 React 可以学得快一些，但不要完全放弃：哪天需要做个小界面给客户演示，用的就是这部分。Databases 课程要慢慢学，因为它紧接在 NodeJS 之前，而 NodeJS 课程要用到 PostgreSQL。

## NodeJS 课程对应客户现场的哪些工作

NodeJS 课程把 JavaScript 带到服务器端，用 Express 构建后端，并引入 PostgreSQL 关系型数据库。各部分依次是 Introduction to NodeJS、Express、Authentication、ORMs、APIs 和 Testing Express。下表把每一部分与客户现场可能遇到的任务对应起来。

| NodeJS 课程的部分 | 客户现场的对应任务 |
|---|---|
| Express | 读懂现有路由，新增一个调用你的 AI 服务的端点 |
| Authentication | 弄清谁有权调用这个端点，避免开出新的漏洞 |
| ORMs 与 PostgreSQL | 查询客户的真实数据，不写与 schema 脱节的 SQL |
| APIs | 设计客户前端团队可以直接使用的响应 |
| Testing Express | 证明你的改动不会破坏已在运行的功能 |

## 一个端点，五个步骤

回到开头的场景。假设你的第一项任务是新增一个端点，为指定客户返回 AI 模型生成的推荐结果。可以按下面的顺序推进，每一步都对应 NodeJS 课程的一个部分。

第一步：打开客户的路由文件，找一个已在正常工作的类似路由，看它用了哪个认证中间件。第二步：声明新路由，挂上同一个中间件。第三步：通过客户已在用的 ORM 从 Postgres 取数据，只选模型需要的列。

第四步：调用模型服务，在模型响应慢或失败时捕获错误，并返回与客户其他端点结构一致的 JSON。第五步：写两个 Express 测试，一个验证有效 token 能拿到数据，一个验证不带 token 的请求会被拒绝。

Python 开发者常犯的错误出现在第三步和第四步：在 ORM 或模型调用前忘了写 `await`。代码照样能跑，但拿到的是 Promise 而不是数据，错误还可能被悄悄吞掉。这正是 JavaScript 课程里 async 部分讲的内容，也是不该跳过它的原因。

第二个错误是照抄旧路由却漏了中间件，导致新端点对任何人开放。第五步里不带 token 的测试，就是为了在上生产环境之前抓住这个问题。

**要点:** 学新技术栈是为了读懂客户的代码，不是为了转行。

## 三点值得记住

第一，顺序本身有道理。async 和 ES6 模块在 JavaScript 课程里讲授，在你接触 Express 之前。对 FDE 来说，面对任何陌生系统也该如此：先弄懂底层，再改上层。

第二，测试放在后端课程之内，而不是拆出去当附加内容。在客户现场，一套能跑通的测试是让对方工程团队信任你改动的快捷方式。即使时间紧，也要把 Testing Express 当作必修。

第三，开源模式本身。课程托管在 GitHub 上，需要贡献者。提交一个修正课程错误的 pull request，就是在别人的仓库里练习代码评审，而这正是 FDE 每天在做的事。

## 把课程变成简历上的证据

不要只在简历上写课程名称，让一个能运行的项目替你说话。学完 NodeJS 课程后，做一个带认证、PostgreSQL 和测试套件的小型 Express API，再按上面的五个步骤加一个调用 AI 模型的端点。在 README 里写清楚你测试了什么。

阅读 FDE 岗位描述时，留意公司或其客户在哪些地方用到 JavaScript 或 Node。如果用到，“构建了带认证、Postgres 和自动化测试的 Express API”这样的描述，远比“熟悉 JavaScript”具体。路径的最后一门课 Getting Hired 也可以用来参考如何展示自己的作品。

客户的技术栈是交到你手上的，不是你能挑选的。能读懂 Express，就意味着又多了一类你能直接进场动手的系统，而不必站在门外。

**本周动手试试:**

- 打开 The Odin Project 的 JavaScript 课程，学完 async 部分，再把你以前写过的一个调用 API 的 Python 脚本改写成 JavaScript。
- 阅读 NodeJS 课程的章节列表，标出哪些你已经用 Python 做过，哪些从没做过。
- 加入 The Odin Project 的 Discord，附上能复现 bug 的最小代码片段提一个问题，练习用别人能回答的方式提问。

## 信源

- [About - The Odin Project](https://www.theodinproject.com/about)

- [TheOdinProject/curriculum - GitHub](https://github.com/TheOdinProject/curriculum)

- [Full Stack JavaScript - The Odin Project](https://www.theodinproject.com/paths/full-stack-javascript)

- [NodeJS - The Odin Project](https://www.theodinproject.com/paths/full-stack-javascript/courses/nodejs)

- [JavaScript - The Odin Project](https://www.theodinproject.com/paths/full-stack-javascript/courses/javascript)
