3、后端项目创建与初始化:使用 Express 或 FastAPI 搭建后端项目

说实话,我开始做联调的时候,最头疼的不是前端也不是后端,而是两边连不起来。 后来我悟了——关键在项目初始化的姿势。今天咱们就把 Express 和 FastAPI 这两种主力后端,从零搭起来,走一遍完整流程。

选型思考:Express vs FastAPI

我个人习惯:如果是快速原型、前端团队已经熟悉 JS 的,直接上 Express;如果涉及数据处理、AI 推理、或者需要强类型校验的,我必选 FastAPI。 说白了,没有银弹,看场景。

维度Express (Node.js)FastAPI (Python)
语言生态前后端统一 JS/TS数据科学、AI 生态丰富
启动速度秒级,轻量秒级(含 import 时间)
类型支持需额外 TypeScript原生 Pydantic 类型校验
异步支持回调/Promise/async原生 async/await
社区成熟度极成熟,中间件丰富快速增长,API 文档自动生成
我的建议:如果是联调教学或小团队项目,先用 FastAPI 更容易和前端对接口——自动生成 Swagger 文档,省很多沟通成本。

使用 Express 搭建 Node.js 后端

先创建项目目录,然后进入目录初始化。我一般会先 npm init -y,再手动加必要字段。

mkdir express-backend
cd express-backend
npm init -y
npm install express

安装完以后,新建 app.js。这是我多年摸出来的最小可用结构:

const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;

app.use(express.json());

app.get('/api/health', (req, res) => {
  res.json({ status: 'ok', timestamp: new Date().toISOString() });
});

app.listen(PORT, () => {
  console.log(`Server running on http://localhost:${PORT}`);
});

启动前记得检查端口是否被占用。我曾经在一次 Demo 前忘了关旧进程,结果怎么都连不上,排查了半天——嗯,这个坑我替你们踩了。

避坑:Express 默认不解析请求体 JSON,必须加 express.json() 中间件。另外 npm start 要配好 scripts。

启动:node app.js。如果要热重载,我习惯加 npm install --save-dev nodemon,然后改 package.json 的 dev 脚本。

使用 FastAPI 搭建 Python 后端

先创建虚拟环境——这一步不能省。我曾经在多个项目共用一个 Python 环境,依赖冲突到崩溃,后来每个项目都独立 venv。

mkdir fastapi-backend
cd fastapi-backend
python -m venv venv
source venv/bin/activate   # Windows: venv\Scripts\activate
pip install fastapi uvicorn

然后写 main.py,我习惯这样开篇:

from fastapi import FastAPI
import uvicorn

app = FastAPI(title="联调实战API")

@app.get("/api/health")
def health():
    return {"status": "ok", "timestamp": "2025-04-01T12:00:00Z"}

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000, reload=True)
关键点:reload=True 可以实现热重载,开发时改代码自动重启。但上生产必须去掉这个参数,否则性能会受影响。

启动命令:python main.py。你也可以用 uvicorn main:app --reload,两种方式我都试过,个人更倾向在脚本里直接 run,方便加启动配置。

项目目录结构推荐

项目一大了,目录乱掉就特容易出联调问题。我建议起步时就规范好:

Express 项目FastAPI 项目
express-backend/
├── app.js
├── package.json
├── node_modules/
└── .env (可选)
fastapi-backend/
├── main.py
├── requirements.txt
├── venv/
└── .env (可选)

我的原则:入口文件始终放在根目录,路由和模型随着业务增长再拆模块。一开始别过度设计,但 .env 文件要配好——联调时接口地址、端口这些全靠它。

环境变量与配置管理

前后端联调最烦的就是写死地址。我用 dotenv 解决(Express 和 FastAPI 都有对应库)。

  • Express: npm install dotenv,然后在 app.js 最顶部写 require('dotenv').config();
  • FastAPI: pip install python-dotenv,用 from dotenv import load_dotenv; load_dotenv()

然后在项目根目录创建 .env 文件,内容类似:

PORT=3000
DATABASE_URL=sqlite:///dev.db
ALLOWED_ORIGINS=http://localhost:5173
重要:.env 文件不要提交到 Git!我有一回不小心把生产环境的密钥推上去了,虽然及时发现改了,但后怕得要命。记得在 .gitignore 里加上 .env。

后端启动后,用浏览器访问 http://localhost:3000/api/health(Express)或 http://localhost:8000/api/health(FastAPI),看到 JSON 返回就说明初始化成功了。 嗯,到这步,后端已经能跑了,下一步就是连上前端搞联调。

后端初始化核心流程 选择后端框架 Express (Node.js) FastAPI (Python) npm init / 安装 express 创建 app.js + 中间件 venv + 安装 fastapi/uvicorn 创建 main.py + 路由 启动服务 → 访问 /api/health 两种框架共用 “.env”环境变量管理
核心总结:不管选哪个框架,初始化流程都遵循“创建项目 → 安装依赖 → 写入口 → 配变量 → 启动验证”。你想想看,联调的第一步就这么简单——把后端跑起来,再和前端握手。