Flask、Express、Next.js 写法不同,都在接请求
先分清三个词
服务器
运行后端代码的电脑或云端运行环境。
后端
运行在服务器上的程序逻辑:接收请求、检查权限、访问数据库、调用第三方服务、返回响应。
后端框架
帮助你组织路由、请求和响应的工具。Flask、Express 和 Next.js Route Handlers 都属于这一层。
text
服务器 厨房所在的房间
后端程序 厨师和工作流程
框架 厨房里的工作台、叫号系统和标准流程同一个“保存留言”接口
目标完全相同:接收 POST /api/messages,读取 text,返回新留言。
Flask:Python
py
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.post('/api/messages')
def create_message():
text = request.json.get('text', '')
message = save_message(text)
return jsonify(message), 201Express:JavaScript / TypeScript
ts
app.post('/api/messages', async (req, res) => {
const text = req.body.text
const message = await saveMessage(text)
return res.status(201).json(message)
})Next.js Route Handler:TypeScript
文件通常放在:
text
app/api/messages/route.tsts
export async function POST(request: Request) {
const { text } = await request.json()
const message = await saveMessage(text)
return Response.json(message, { status: 201 })
}语法不同,但都完成:
text
声明 POST 和地址
↓
读取请求 JSON
↓
执行保存逻辑
↓
返回 201 和 JSON什么时候选哪一种
已经有 Python 项目或 AI 处理脚本
Flask 容易和 Python 库放在一起。
前后端都想使用 TypeScript,后端独立运行
Express 常见,路由和中间件生态成熟。
前端已经是 Next.js,希望页面和 API 在同一项目
Route Handler 可以减少独立后端项目,但它仍然是后端代码,不会因为和 React 放在同一仓库就变成前端。
后端必须负责什么
text
身份验证 这个请求是谁发的
权限判断 这个人能不能改这条数据
输入验证 text 是否为空或过长
业务规则 是否允许删除、额度是否足够
秘密管理 数据库密码和第三方 API Key
数据访问 查询、写入和事务
错误响应 返回合适状态码和可理解信息前端可以提前做输入提示,但最终规则必须留在后端。
后端不等于数据库
后端是执行逻辑的程序,数据库是保存数据的系统。
text
后端说:请保存用户 7 的留言“你好”
数据库说:已写入 messages 表,ID 是 42后端可以暂时不使用数据库,例如返回计算结果;数据库也不会自己决定页面按钮该显示什么。
后端怎样启动
不同项目可能使用:
bash
python app.py
npm run server
pnpm dev真正命令要看 README 和项目说明文件。启动成功时会显示监听地址和端口,例如:
text
Server listening on http://localhost:3000前端怎样找到后端
开发时可能是:
text
前端 http://localhost:5173
后端 http://localhost:3000前端请求:
ts
fetch('http://localhost:3000/api/messages')也可能通过开发代理,让前端仍写 /api/messages。线上则可能同域名或不同域名。
后端错误去哪里看
text
浏览器 Network 看到状态码和返回信息
本地后端终端 看到真实异常、文件和行号
部署平台日志 看到线上启动和运行错误Network 的 500 是结果;服务器日志才可能写出 DATABASE_URL is not defined。
Next.js 的 API 文件和 React 页面在同一个项目,所以 API 代码可以安全地在浏览器读取数据库管理员密钥吗?
答案:不可以。Route Handler 是后端运行位置,可以读取服务器变量;React 客户端代码会进入浏览器。是否同一仓库不改变安全边界。