学过前端后,应该如何规划后端开发的入门学习路径?
如果你已经学过 JavaScript,又没有明确的岗位或项目要求,建议先用 Node.js 入门后端,做一个带数据库和登录功能的小项目,再考虑要不要学 PHP 和 Laravel。沿用熟悉的语言,可以把更多精力放在 HTTP、数据存储和权限控制上。
如果目标团队使用 Laravel,或者有人能带你做 Laravel 项目,直接学 PHP 和 Laravel 也合适。能找到什么学习资源、能参与什么项目,往往比比较技术名称更有助于选择。
Node.js 和 Laravel 应该怎么选?
| 技术 | 是什么 | 入门时需要学习什么 |
|---|---|---|
| Node.js | 在浏览器之外运行 JavaScript 的运行时 | Node.js 的模块、异步操作、HTTP 服务,以及选用的后端框架 |
| Laravel | 基于 PHP 的 Web 应用框架 | PHP 基础、Composer,以及 Laravel 的路由、数据库访问等功能 |
两者的定位不同,更适合放在一起比较的是“Node.js + Express”和“PHP + Laravel”。
选择 Node.js 的主要好处是可以继续使用 JavaScript。不过,浏览器里的经验只能迁移一部分:后端没有用来操作页面的 DOM,你需要处理请求、访问数据库,还要决定哪些用户可以读取或修改哪些数据。
Laravel 提供了一套较完整的 Web 开发组织方式,包括路由、中间件、数据验证和数据库迁移等。走这条路线,可以先学 PHP 的语法、类、命名空间和异常处理,再熟悉 Laravel 的框架约定。
入门时选一条路线就够了,不必同时学两套技术栈。
第一步:补齐 JavaScript 和 HTTP 基础
选择 Node.js 的话,先确认自己会用这些基础知识:
- 函数、对象、数组,以及常用的数组操作。
- 模块导入与导出。
- Promise、
async/await和try...catch。 - JSON 的序列化与解析。
高级语法可以在写接口的过程中逐步补上,不必全学完才开始做后端。
接着,弄清一次请求的处理过程:
浏览器发送请求
→ 后端根据请求方法和路径处理业务
→ 必要时读写数据库
→ 后端返回状态码和响应内容
→ 前端更新页面
需要掌握的内容包括请求方法、URL、请求头、请求体和响应状态码。例如,GET /api/tasks 可以用于查询任务,POST /api/tasks 可以用于创建任务。
可以打开浏览器开发者工具的 Network 面板,观察参数放在哪里、接口返回了什么数据。结合实际请求来学,比只背概念更容易理解。
第二步:先写一个能运行的接口
安装处于支持期的 Node.js LTS 版本后,先用内置的 node:http 模块练习处理请求和返回响应,这一步不需要安装框架。
创建 server.cjs:
const { createServer } = require("node:http");
const tasks = [
{ id: 1, title: "学习 HTTP", completed: false },
];
const server = createServer((req, res) => {
const url = new URL(req.url, "http://localhost");
res.setHeader("Content-Type", "application/json; charset=utf-8");
if (url.pathname !== "/api/tasks") {
res.writeHead(404);
res.end(JSON.stringify({ error: "接口不存在" }));
return;
}
if (req.method !== "GET") {
res.setHeader("Allow", "GET");
res.writeHead(405);
res.end(JSON.stringify({ error: "不支持该请求方法" }));
return;
}
res.writeHead(200);
res.end(JSON.stringify(tasks));
});
server.listen(3000, "127.0.0.1", () => {
console.log("Server running at http://127.0.0.1:3000");
});
启动服务:
node server.cjs
在另一个终端请求接口:
curl -i http://127.0.0.1:3000/api/tasks
通过这个例子,可以练习路由判断、设置状态码和返回 JSON。任务数据保存在内存中,没有持久化,也没有登录或修改功能,适合作为入门练习。
接下来,用 Express 等框架实现同样的接口,学习框架如何组织路由、中间件和错误处理。入门时先理解原生请求的处理过程即可,不必把整套框架功能都手写一遍。
第三步:用一个项目学习数据库和业务逻辑
继续做一个任务管理应用,前端沿用你熟悉的 HTML、CSS 和 JavaScript。先实现这些接口:
| 接口 | 功能 |
|---|---|
GET /api/tasks | 查询任务 |
POST /api/tasks | 创建任务 |
PATCH /api/tasks/:id | 修改任务 |
DELETE /api/tasks/:id | 删除任务 |
先用内存中的数据跑通接口,再接入一种关系型数据库,例如 PostgreSQL 或 MySQL。这个阶段需要学习:
- 表、字段、主键、外键和约束。
SELECT、INSERT、UPDATE、DELETE。- 基本关联查询,以及事务能解决什么问题。
- 参数化查询,避免把用户输入直接拼进 SQL。
- 数据库迁移,用文件记录表结构的变化。
使用 ORM 前,至少要会写简单的 SQL,并理解 ORM 最终执行的数据库操作。
可以这样检查这一阶段的成果:从前端创建任务,重启后端后,任务仍然存在。提交空标题时,服务端应拒绝请求;修改不存在的任务时,接口应返回合适的错误。
第四步:加入登录、权限和部署
完成基础增删改查后,再增加用户功能。创建用户时保存密码哈希,登录后建立会话,并将每条任务关联到所属用户。
认证和授权分别回答两个问题:
- 认证:当前请求来自哪个用户?
- 授权:这个用户是否有权操作这条任务?
任务管理应用可以先采用基于 Cookie 的 Session 方案,JWT 刷新机制可以暂时放一放。学习会话时,也要弄清 Cookie 属性、跨站请求伪造防护,以及前后端跨源时的配置。
权限检查必须在服务端完成。即使前端隐藏了“删除”按钮,用户仍然可以直接发送删除请求。
最后,把应用部署到能够运行后端的环境中,练习配置环境变量、连接数据库、查看日志和使用 HTTPS。数据库密码等敏感配置不要写进前端代码,也不要提交到代码仓库。
怎样安排学习进度?
可以按下面这些目标推进,比规定自己“几天学完后端”更实际:
- 写出接口,并能解释请求和响应的内容。
- 让前端调用接口,完成增删改查。
- 把数据保存进数据库,并处理无效输入。
- 实现登录,让用户只能访问自己的数据。
- 部署应用,并根据日志定位错误。
为关键行为补上测试,例如“未登录不能创建任务”“用户 A 不能删除用户 B 的任务”“无效输入不会写入数据库”。
当前端和后端地址的协议、主机或端口不同时,还可能遇到 CORS。允许范围应根据实际前端来源配置。CORS 本身不提供用户认证,也不能代替权限检查。
完成这个项目后,再按需求学习 TypeScript、缓存或后台任务。微服务、消息队列和 Kubernetes 可以等项目确实需要时再学。如果最终选择 Laravel,也可以按相同顺序推进,把语言与框架部分换成 PHP、Composer 和 Laravel 即可。
备注:内容仅供参考。
