Node.js新手教程:从零开始学习服务器端JavaScript
引言:我是怎么走上Node.js之路的

去年我刚入职的时候,公司接了一个客户项目,需要快速搭建一个API后端服务,支持前端团队进行页面交互开发。当时我主要做前端,对于服务端接触不多,只知道Node.js可以用JavaScript写后端,听起来很酷。
于是我决定试试看用Node.js来搭这个后台接口服务。说实话,刚开始完全是懵的——什么Express、Koa、RESTful API、路由设计这些词都听过但不知道怎么下手。折腾了一个星期,踩了很多坑,也收获颇丰。今天就想把这段经历记录下来,和刚开始学Node.js的新手朋友们一起交流分享。
项目背景与问题描述


项目是一个线上问卷系统,要求:
- 提供用户注册、登录功能
- 支持问卷创建、编辑、发布与结果统计
- 所有操作需通过API完成,前后端分离
- 前端使用React框架
- 后端由我一人负责,希望尽快上线
挑战在于我完全不了解Node.js的服务端开发流程。从最初的初始化项目,到中间如何组织代码结构、数据库连接,以及后续的错误处理、权限控制、性能优化等,每一步都有不确定因素。
尤其是当我第一次尝试写个简单的“Hello World”服务器时,就已经遇到了问题:“为什么访问localhost:3000打不开?”、“Express中间件到底应该怎么用?”、“数据库连接不上怎么办?”……这些问题虽然看起来简单,但对于新手来说真的会卡住半天甚至一天。
技术选型与实现思路

结合项目的实际需求和技术栈的匹配度,我最终选择了以下技术方案:
- Node.js + Express:轻量级且社区活跃,适合入门和中小型项目
- MongoDB:文档型数据库,配合Mongoose ODM工具,易于开发
- JWT(JSON Web Token):用于用户认证
- Bcrypt.js:密码加密
- Morgan:日志记录
- Dotenv:环境变量管理
- Nodemon:热更新开发工具
整体架构采用模块化方式组织代码,分为routes、controllers、models、middlewares等目录,便于后期扩展和维护。
代码实践:从“Hello World”开始
我们先从最基础的示例入手,了解Node.js是如何工作的。
初始化项目
mkdir survey-api
cd survey-api
npm init -y
安装Express和其他依赖:
npm install express morgan dotenv mongoose bcryptjs jsonwebtoken
开发环境安装Nodemon:
npm install --save-dev nodemon
在package.json中修改scripts部分:
"scripts": {
"start": "node index.js",
"dev": "nodemon index.js"
}
编写第一个服务器
新建index.js文件:
const express = require('express');
const morgan = require('morgan');
const dotenv = require('dotenv');
// 加载环境变量
dotenv.config();
const app = express();
const PORT = process.env.PORT || 3000;
// 日志中间件
app.use(morgan('tiny'));
// 根路径响应
app.get('/', (req, res) => {
res.send('Hello, welcome to Survey API!');
});
// 启动服务
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
运行命令启动开发服务器:
npm run dev
打开浏览器访问 http://localhost:3000,你就能看到“Hello, welcome to Survey API!”了!
是不是很简单?但这只是起点,真正复杂的内容还在后面。
踩过的那些坑和解决过程
作为一个刚入行的小白,在整个开发过程中踩了不少坑,下面挑几个印象深刻的分享一下。
1. 数据库连接失败
最开始我想用MongoDB Atlas(云数据库),但是在连接字符串配置上出了问题。明明按照官网给的URL填好了,但就是连不上。
后来发现是.env文件没正确加载,导致process.env.MONGO_URI是undefined,自然就报错。
解决方案:
- 确保
.env文件存在,并放在项目根目录下 - 使用
console.log(process.env)查看是否读取到对应变量 - 检查MongoDB Atlas的IP白名单设置是否放开了当前机器的公网IP
现在每次初始化新项目,我都会习惯性地加个环境变量打印,方便排查。
2. Express中间件执行顺序混乱
有一次我在路由前写了错误处理中间件,但根本没生效。后来才意识到,Express的中间件是有执行顺序的,默认是从上往下执行。
比如这样写是不对的:
app.use((err, req, res, next) => {
console.error(err);
res.status(500).send('Something broke!');
});
app.get('/api/test', (req, res) => {
throw new Error('Test error');
});
解决办法: 错误处理中间件必须放在所有路由之后,这样才能捕获前面抛出的异常。
app.get('/api/test', (req, res) => {
throw new Error('Test error');
});
// 放在最后面
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).send({ message: 'Internal server error' });
});
从此以后我养成一个习惯:中间件按逻辑顺序书写,重要的比如日志、错误处理都放到合适的位置。
3. CORS问题让我崩溃
开发过程中,我写的后端接口在Postman里可以正常返回数据,但在前端调用的时候却提示CORS blocked。
原因是我没有开启跨域中间件。这个问题在前后端分离开发中非常常见,特别是在本地开发阶段。
解决方法:
安装cors中间件:
npm install cors
然后在入口文件中引入并使用:
const cors = require('cors');
app.use(cors());
如果想更细粒度控制,可以传入配置对象:
app.use(cors({
origin: 'http://localhost:3001', // 前端地址
credentials: true,
}));
别小看这个问题,调试起来确实挺耗时间的。建议新手一开始就加上CORS配置,避免后期踩雷。
效果总结:上线后的反馈与收益
经过两周多的努力,我完成了基本的API开发,包括用户注册登录、问卷增删改查、权限控制等功能。部署到线上后,系统稳定运行了几个月,期间几乎没有出现重大故障。
这次经历带来的最大收获是:
- 对全栈开发有了完整认知,从前端请求到后端处理再到数据库存储都能理解透彻。
- 熟悉了Node.js生态和最佳实践,掌握了Express的基本使用、中间件机制、模块化组织方式等。
- 养成了良好的工程习惯,比如合理划分模块、使用环境变量管理敏感信息、添加日志监控等。
虽然不是什么特别复杂的项目,但对于刚入门的同学来说,这样的实战经验比只看书或视频要有效得多。
给新手的几点建议
如果你也在学Node.js或者正准备开始,这里是我的一些建议,希望能帮你少走弯路。
1. 不要死磕理论,先动手写出来
很多新手喜欢先把《深入Node.js》或者官方文档从头读完再写代码,这其实效率很低。Node.js不像Java那么复杂,你可以边写边学。
推荐做法:从一个真实的小项目起步,比如做一个任务清单的API或者博客后端。遇到不懂的地方再查资料、看文档,带着目的去学,进步会更快。
2. 学会阅读错误日志
Node.js运行出错时会在终端输出大量信息,很多初学者一看就懵。其实只要掌握一些基本的定位技巧,很快就能判断错误源头。
举个例子,当你看到类似“Error: Cannot find module 'express'”,那说明你还没安装express包,运行npm install express即可修复。
3. 别怕用“笨办法”,先跑通再说
比如写用户注册接口时,初期不需要考虑太多性能和安全问题,先把基本功能跑通。等后续测试没问题了,再去加验证码、防刷、输入验证、JWT鉴权等功能。
先完成,再完美。
4. 多用工具辅助开发
- Postman / Insomnia:用来调试API接口非常方便
- MongoDB Compass:可视化查看数据库内容
- VSCode插件:如Prettier格式化代码、ESLint语法检查、DotENV高亮环境变量等
- Git版本管理:即使是一个人开发,也要养成commit的习惯
写在最后:Node.js值得学吗?
我的答案是:当然值得!
Node.js已经成为现代Web开发不可或缺的一部分。它允许开发者用统一的语言(JavaScript)构建前后端应用,这对于小型团队或个人开发者来说尤其友好。再加上丰富的npm生态和异步非阻塞的特性,让它在I/O密集型场景下表现优异。
无论你是前端想往全栈发展,还是刚毕业的新人想入门后端开发,Node.js都是一个不错的选择。
我也还在不断学习的路上。未来如果有更多进阶主题(比如WebSocket、服务端渲染、Docker部署等),我会继续分享出来。
欢迎你在评论区留言交流,一起成长。

评论 0