Node.js新手教程:从零开始学习服务器端JavaScript
Node.js新手教程:从零开始,构建属于你的服务器端应用

还记得我第一次接触 Node.js 的时候,是在公司接手一个内部的后台管理系统项目。那时候前端 Vue 已经写得差不多了,但后端还没完全搭建起来,需求又特别急。老板说:“要么咱们自己搭个简单的服务试试?”于是,我就踏上了 Node.js 的学习之路。
一转眼五年过去了,Node.js 在我的工作中扮演了越来越重要的角色。从最初的 API 快速搭建、脚手架开发,到现在的微服务架构支持,它几乎成了前端工程师不可或缺的技能之一。
如果你是刚接触 Node.js 的同学,希望这篇实战经验分享能让你少走弯路,在真实的项目中快速上手。
项目背景:为什么我需要学 Node.js?
那次我们做的是一个企业级数据看板系统,前后端分离架构。UI 层用 Vue 实现,原本打算使用 Java 后端提供接口。但由于时间紧任务重,Java 团队人手不足,我们就临时决定由前端团队来搭建一个轻量的数据接口服务。
目标很简单:搭建一套本地可用的 Mock 数据服务 + 接口代理服务,用来对接前端开发和测试。要求不高,不需要复杂的鉴权体系,只需要:
- 提供 RESTful API
- 支持模拟数据库数据(比如用户信息、订单列表)
- 支持拦截请求并记录日志
- 能部署成静态资源服务
听起来是不是很像 Express 或者 Koa 干的事?对!于是我开始了我的 Node.js 第一个项目。
初识 Node.js:安装 & Hello World
第一步当然是环境搭建。
Node.js 官网下载 LTS 版本即可(我当时用的是 v14),然后在终端里执行 node -v 看是否安装成功。npm 会自带安装,一般也不用额外配置。
接着我写了人生第一个 Node 代码:app.js
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello from Node.js');
});
server.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
运行命令:
node app.js
访问 http://localhost:3000,控制台打出熟悉的 “Hello from Node.js”。那一刻我记得很清楚,感觉像是打开了一扇新世界的大门。
不过你也知道,这种原生写法对于项目来说太“原始”了。为了提高效率,我们需要更强大的框架。
技术选型:Express vs Koa
当时社区主流方案有 Express 和 Koa。经过对比,我选择了 Express,因为它的文档全、插件多,适合快速搭建。
安装 Express:
npm init -y
npm install express
然后创建主文件 index.js:
const express = require('express');
const app = express();
const PORT = 3000;
app.get('/', (req, res) => {
res.send('Hello from Express!');
});
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
启动服务:
node index.js
访问 / 接口就能看到返回的结果。这一步只是入门,真正的挑战还在后面。
遇到的第一个问题:如何组织路由结构?
随着接口数量增加,我发现所有路由都写在 index.js 文件里非常乱,根本没法维护。这时候就需要引入模块化设计思想。
我按照业务划分了几个目录:
project/
├── routes/
│ ├── user.js
│ └── order.js
├── controllers/
│ ├── userController.js
│ └── orderController.js
└── index.js
以 routes/user.js 为例:
const express = require('express');
const router = express.Router();
const userController = require('../controllers/userController');
router.get('/users', userController.getAllUsers);
router.get('/users/:id', userController.getUserById);
module.exports = router;
然后在 index.js 中注册:
const userRoutes = require('./routes/user');
app.use('/api', userRoutes);
这样一来,每个模块都有自己的职责边界,也方便后期扩展。
中间件的应用:解决跨域、日志等通用需求
项目做到一半才发现,前端调用这些本地接口时遇到了 CORS 跨域问题。为了解决这个问题,我引入了官方推荐的中间件:
npm install cors
添加中间件:
const cors = require('cors');
app.use(cors());
这样就解决了跨域的问题。
另外我还加了个日志中间件:
npm install morgan
用起来也很简单:
const morgan = require('morgan');
app.use(morgan('dev'));
这样每次接口被调用都会打印日志,调试的时候超级好用。
模拟数据库数据:从 JSON 文件出发
作为一个 Mock Server,我们并不需要真的连数据库。我直接用了几个 JSON 文件作为“数据库”。
例如 mock/users.json:
[
{ "id": 1, "name": "Alice" },
{ "id": 2, "name": "Bob" }
]
然后在 controller 中读取这个文件:
const fs = require('fs');
const path = require('path');
function getAllUsers(req, res) {
const dataPath = path.join(__dirname, '../mock/users.json');
fs.readFile(dataPath, 'utf8', (err, data) => {
if (err) return res.status(500).send(err);
res.send(JSON.parse(data));
});
}

虽然这只是 mock 数据,但对于前端开发和测试来说已经足够了。
小插曲:Node.js 中异步处理的坑
有一天我在读取多个 JSON 文件合并输出的时候,出现了顺序混乱的问题。后来才发现,Node.js 是单线程非阻塞模型,读取文件是异步操作。
我当时的写法是:
readFileA(() => { ... });
readFileB(() => { ... });
结果 A 和 B 返回的顺序不稳定。这时候我就学会了用 Promise 来优雅地处理异步流程。
比如改用:
Promise.all([
readJSONFile(pathA),
readJSONFile(pathB)
]).then(values => {
// 处理 values
})
其中 readJSONFile 是封装后的函数:
function readJSONFile(filePath) {
return new Promise((resolve, reject) => {
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) reject(err);
resolve(JSON.parse(data));
});
});
}

从此之后,遇到异步操作我都习惯性优先考虑用 Promise 或者 async/await。
最终效果:我们做出了一个本地 Mock 服务
这个服务最终稳定运行了一个月,帮助前端按时完成了联调和上线准备。虽然只是一个小型项目,但它让我彻底认识到了 Node.js 的潜力 —— 前端也能搞定后端的小活。
项目打包后部署起来也非常方便,只要本地运行 node index.js,就可以立即提供接口服务。我们甚至把它集成进了 CI 流程里,用于自动化测试环境搭建。
我的几点建议:给 Node.js 新手们
1. 从 Express 入门是个不错的选择
不要一开始就被 Koa 或 Nest.js 劝退。Express 更简单易懂,文档丰富,社区成熟,更适合新手入门。
2. 养成良好的目录结构习惯
哪怕是小项目,也要提前规划好目录结构。后期迭代时你会感谢现在认真思考的你。
3. 善用中间件,别重复造轮子
Node 社区非常活跃,很多常见的功能都可以找到现成的中间件,比如 JWT 认证、错误处理、限流、Swagger 文档生成等等。先学会使用,再尝试理解其实现原理。
4. 掌握基本的异步编程技巧
Node.js 的一大特点就是异步,必须熟悉回调函数、Promise、async/await 这几种方式,并能在实际项目中灵活运用。
5. 结合前端工作流一起实践
你可以把 Node.js 用作开发工具链的一部分,比如自动压缩图片、监听文件变化自动重启服务、生成接口文档、构建 SSR 应用等。
技术趋势展望:Node.js 不只是后端的玩具
如今 Node.js 已不仅仅是服务端语言,它是现代前端工程化的基石。
- Webpack/Babel/Vite 都基于 Node.js 开发
- 很多 CLI 工具(如 vue-cli)都是基于 Node.js 编写的
- SSR(服务端渲染)、SSG(静态生成)也需要 Node.js 环境的支持
掌握 Node.js,不仅能写出漂亮的后端接口,还能提升你在整个前端生态中的技术话语权。
结语:Node.js 是通向全栈的第一步
回过头看那个临时接下的后端任务,竟然成了我职业生涯的一个转折点。它不仅让我掌握了 Node.js,也让我在后续工作中逐步深入到了 DevOps、工程化、性能优化等领域。
如果你也是前端开发者,强烈建议你花点时间去学习 Node.js。它会让你的能力圈变得更广,也会让你在团队中更有价值。
Node.js 的学习门槛其实并没有想象那么高,关键在于动手写、勇于试错。希望这篇文章能给你一些启发和鼓励。让我们一起在 Node.js 的世界里走得更远吧!

评论 0