请写一篇关于【Node.js新手教程:从零开始学习服务器端JavaScript】的技术文章
去年十月,我坐在东山口那间月租3500的老破小里,窗外是广州秋天难得的凉意。电脑屏幕上开着三个终端窗口、一个 VS Code 和一份未完成的简历。老婆在厨房煮陈皮红豆沙,香味飘进来,但我心里却像被水泥封住——裸辞已经三个月了,存款还剩不到五万块。
“阿杰,你真不后悔?”她端着糖水进来,轻声问我。
我苦笑:“后悔?当然后悔。但再待下去,怕是要抑郁了。”
那时我在某大厂做前端,每天996,需求改到凌晨三点是常态。项目用的是 React + SpringBoot 的经典组合,后端同事老李总爱开玩笑:“你们前端就是切图仔,接口我们给你写好,你点点鼠标就行。”这话听着刺耳,但更刺心的是——我真的只会点鼠标。遇到跨域、部署、数据库连接这些事,只能干瞪眼等后端救场。
我不想再当“半吊子”了。
为什么选 Node.js?因为“全栈”的梦还没死
Gap 的前两个月,我其实试过转 Python。毕竟 Python 简洁,社区强,AI 又火。我照着《Flask 入门实战》敲了三天,结果部署到阿里云时卡在 Nginx 配置上,折腾到凌晨四点,差点把键盘砸了。
后来一次和前同事阿强喝酒,他现在在一家 SaaS 初创公司做全栈。“你搞 React 的,干嘛不直接学 Node.js?”他一口啤酒下肚,“前后端都是 JavaScript,数据格式都一样(JSON),调试起来不用切换脑子,多爽!”
我愣住了。对啊,我天天写 React,组件里 fetch 调接口调得飞起,为什么不自己写个接口?
那一刻,我决定:从零学 Node.js。
第一个“Hello World”服务器:比泡一壶普洱还简单
10月18号晚上九点,我关掉所有招聘APP,打开 VS Code,新建文件夹叫 my-first-node-server。
// server.js
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello from Dongshankou, Guangzhou!');
});
server.listen(3000, () => {
console.log('Server running at http://localhost:3000/');
});
在终端输入 node server.js,浏览器打开 localhost:3000——一行字跳出来。那一刻,我居然有点想哭。
不是感动,是释然。原来服务器没那么神秘。它就是一个程序,监听某个端口,收到请求就回点东西。和我写 React 组件“接收 props 返回 JSX”本质上是一回事!
前端思维 + 后端能力 = 真正的自由。
实战:用 Express 搭一个“老婆的甜品订单系统”
光会 Hello World 没用。我想做个真实项目练手。正好老婆打算周末摆摊卖双皮奶,需要个简易接单系统。
需求很简单:
- 客户填名字、电话、数量
- 提交后存到本地 JSON 文件
- 我们能在后台看到订单列表
我用了 Express(Node.js 最流行的框架),因为它像 React 的 Create React App —— 开箱即用。
npm init -y
npm install express
然后写路由:
// app.js
const express = require('express');
const fs = require('fs');
const path = require('path');
const app = express();
app.use(express.json());
// 模拟数据库(别笑,初期够用)
const ORDERS_FILE = path.join(__dirname, 'orders.json');
// 获取订单
app.get('/api/orders', (req, res) => {
const orders = JSON.parse(fs.readFileSync(ORDERS_FILE) || '[]');
res.json(orders);
});
// 创建订单
app.post('/api/orders', (req, res) => {
const orders = JSON.parse(fs.readFileSync(ORDERS_FILE) || '[]');
const newOrder = { id: Date.now(), ...req.body };
orders.push(newOrder);
fs.writeFileSync(ORDERS_FILE, JSON.stringify(orders, null, 2));
res.status(201).json(newOrder);
});
app.listen(4000, () => console.log('甜品订单系统启动!'));
前端我用 React 写了个极简页面,fetch 调这个 API。整个项目三天搞定,部署在我闲置的腾讯云学生机上(一个月10块钱)。
老婆第一次用的时候眼睛发亮:“这比我表姐用的 Excel 强多了!”
我笑着回她:“这可是你老公亲手写的全栈系统。”
对比视角:Node.js vs Python vs SpringBoot
学 Node 的过程中,我不自觉拿它和 Python、SpringBoot 对比——毕竟这是我熟悉的两个“敌人”。
Python(Flask/Django)
优点:语法优雅,AI/数据分析生态无敌。
缺点:异步编程模型不如 Node 原生,部署时经常遇到虚拟环境、依赖版本冲突。对我这种只想快速出活的 solo 开发者,有点重。
SpringBoot(Java)
优点:企业级稳定,微服务生态成熟。
缺点:配置繁琐,启动慢,内存占用高。我在大厂时见过一个简单 CRUD 接口要写 5 个类 + 注解 + XML(虽然现在好多了)。而且……Java 写起来真的不够“爽”。
Node.js
优点:
- JavaScript 全栈统一,心智负担小
- npm 包管理天下第一(虽然有时候太碎)
- 事件驱动、非阻塞 I/O,天生适合高并发 I/O 场景(比如聊天、实时数据)
- 生态爆炸,Express、Koa、NestJS……总有一款适合你
缺点:
- 回调地狱(不过 async/await 已经救回来了)
- CPU 密集型任务弱(但谁让你用 JS 干这个?)
- 类型系统弱(TS 可以补)
结论:如果你已经是前端(尤其是 React 选手),Node.js 是通往全栈最平滑的路径。
找工作时,Node.js 成了我的“加薪筹码”
今年二月,我开始投简历。面试官一听说我会 React + Node.js,眼睛立刻亮了。
有家公司 HR 直接问:“你能独立开发完整功能模块吗?从前端到部署?”
我说:“可以。上周我还用 Node.js 写了个微信小程序后端,配合 React 做管理后台。”
最后 offer 谈到 22k(之前是 15k),HR 笑着说:“主要是看你有全栈能力,省了我们招两个人的钱。”
技术人最大的安全感,不是大厂 title,而是“我能一个人搞定一件事”的底气。
给想学 Node.js 的新手几点真心话
别一上来就学 NestJS、TypeScript、MongoDB
先用原生 http 或 Express 搞懂核心概念:请求、响应、中间件、路由。就像学开车先摸方向盘,别急着改装涡轮增压。用你熟悉的前端框架对接
既然你会 React,就用fetch或axios调自己的 Node 接口。看到数据从前端传到后端再返回,那种闭环感超治愈。部署一定要动手
买个最便宜的云服务器(腾讯云/阿里云学生机),用 PM2 启动你的服务。域名解析、Nginx 反向代理这些坑,踩一次就终身难忘。别怕“玩具项目”
我那个甜品订单系统就是玩具,但它让我理解了 RESTful API、CRUD、文件存储。真实项目也是从玩具进化来的。和 Python/SpringBoot 不是敌人
Node 适合 I/O 密集型(Web、API、实时应用),Python 适合数据/AI,Java 适合大型企业系统。真正的高手,知道什么时候用什么工具。
写在最后:技术人的 Gap Year,也可以是重启键
现在我坐在珠江新城的新办公室,窗外是广州塔。月薪涨了,但更珍贵的是心态变了。
我不再焦虑“会不会被替代”,因为我知道:只要能解决问题,就有价值。Node.js 没让我变成架构师,但它给了我“从0到1”的能力——这种能力,比任何框架都重要。
上周五晚上,我又和老婆去东山口散步。路过那间老破小,她笑着说:“要不要进去看看?”
我摇摇头:“不了,新家在琶洲,离公司近。”
但我知道,那段裸辞的日子、那些深夜调试的报错、那个在 localhost:3000 上跳出来的“Hello Guangzhou”,永远是我技术生涯的转折点。
如果你也在迷茫,不妨试试:写一行 Node.js 代码。
说不定,你的新世界,就从这一行开始。

评论 0