2026/9/2 11:58:04

Node.js新手入门:从安装到第一个Web服务器的完整指南

Node.js新手入门:从安装到第一个Web服务器的完整指南 1. 从“Node.js是干什么的”开始别急着敲代码如果你刚接触编程或者是从前端转过来想自己搭个服务器听到“Node.js”这个词第一反应可能就是去搜“Node.js安装教程”。但安装只是第一步也是最容易踩坑的一步。很多人装完就卡住了不知道下一步该干嘛或者跑个简单脚本都报错。所以在动手之前我们先搞清楚 Node.js 到底解决了什么问题。简单说Node.js 让 JavaScript 能跑在服务器上。以前 JavaScript 只能待在浏览器里负责网页的动态效果有了 Node.js你就可以用 JavaScript 写后端服务、命令行工具甚至桌面应用。它的核心价值是“前后端语言统一”和“高性能 I/O 处理”特别适合需要处理大量网络请求、实时通信如聊天应用或 I/O 密集型如文件操作、数据库查询的场景。对于新手来说最直接的用途可能是运行和构建前端工具像 Vue CLI、Create React App、Webpack 这些现代前端脚手架和打包工具都依赖 Node.js 环境。写简单的后端 API给自己写个数据接口或者做个全栈小项目。写脚本自动化任务比如批量处理文件、爬取数据等。明白了“干什么”我们再来看“怎么装”。网上的教程很多但新手最容易在版本、路径和权限上出问题。下面我会按“理解-安装-验证-上手”的顺序带你走一遍重点不是复制命令而是告诉你每个步骤背后的原因和常见坑点。2. 安装 Node.js避开 “v24.19.0 is not yet released” 这类坑安装 Node.js 本身不复杂但新手常被版本问题、安装器选项和系统环境搞懵。我们从选择版本开始。2.1 版本选择LTS 还是 Current打开 Node.js 中文网 或官网你会看到两个主要版本推荐LTS长期支持版和Current最新尝鲜版。对于新手和绝大多数生产项目无脑选择 LTS 版本。原因很简单稳定LTS 版本经过更长时间的测试bug 少兼容性好。生态支持好你遇到的大部分教程、第三方库npm 包都会优先兼容 LTS 版本。维护周期长官方会提供长达数年的安全更新和支持。而 Current 版本包含了最新的语言特性和性能改进但可能不稳定一些第三方库也可能还没适配。搜索热词里出现的error installing 24.19.0: node.js v24.19.0 is not yet released这类错误很可能就是使用了尚未正式发布的版本号或者安装源如 Chocolatey、Homebrew的缓存未更新。所以永远从官方渠道下载标记为 LTS 的安装包。2.2 安装过程Windows / macOS / Linux 的注意点Windows 系统包括 Win11下载从官网下载.msi安装包LTS 版本。运行安装程序这里有几个关键选项安装路径默认是C:\Program Files\nodejs\。如果你C盘空间紧张可以改到其他盘但路径不要包含中文或空格比如D:\DevTools\nodejs就很好。自动安装必要工具安装程序会询问是否安装Chocolatey以及一些用于编译原生模块的工具像 Python、Visual Studio Build Tools。对于纯新手我建议先不要勾选。我们的首要目标是让 Node.js 本身跑起来这些编译工具可以在后续需要安装某些特定 npm 包时再按需安装避免初次安装过于复杂和耗时。完成安装一路点击“Next”即可。安装程序会自动将 Node.js 和 npmNode.js 的包管理器添加到系统环境变量PATH中。macOS 系统推荐使用 Homebrew如果你熟悉命令行在终端执行brew install node是最干净的方式。Homebrew 会自动管理版本和依赖。使用官方安装包和 Windows 类似下载.pkg文件安装即可同样会配置好环境变量。Linux 系统不建议直接使用系统自带的软件包管理器如apt安装版本通常很旧。推荐使用NodeSource提供的安装脚本或者用nvmNode Version Manager来管理多个 Node.js 版本后者对开发者更友好。2.3 验证安装三个命令确认一切就绪安装完成后不要急着去写代码先打开终端Windows 是 CMD 或 PowerShellmacOS/Linux 是 Terminal验证。# 1. 检查 Node.js 版本 node -v # 应该输出类似 v18.20.0具体版本号取决于你下载的LTS版本 # 2. 检查 npm 版本 npm -v # 应该输出类似 10.5.0 # 3. 进入 Node.js 交互式环境REPL node # 进入后可以输入 JavaScript 代码例如 console.log(Hello, Node.js!) .exit # 输入 .exit 退出如果node -v或npm -v命令报错“不是内部或外部命令”说明环境变量没有正确配置。需要检查安装路径是否被添加到系统的PATH中或者尝试重启终端/电脑。3. 第一个脚本从“Hello World”到理解模块环境好了我们来点实际的。别小看“Hello World”这里能理解 Node.js 执行代码和浏览器里的根本区别。3.1 创建并运行第一个文件找个地方新建一个文件夹比如nodejs-demo。在里面创建一个文件命名为app.js名字随意但后缀要是.js。用任何文本编辑器VSCode、Sublime、甚至记事本打开它输入console.log(Hello from Node.js!); const path require(path); console.log(当前文件所在目录, __dirname); console.log(当前文件完整路径, __filename);打开终端导航到nodejs-demo目录下。cd /path/to/your/nodejs-demo运行这个脚本node app.js你应该会看到输出Hello from Node.js! 当前文件所在目录 /path/to/your/nodejs-demo 当前文件完整路径 /path/to/your/nodejs-demo/app.js关键点在浏览器里console.log输出到开发者工具的控制台。在 Node.js 里它输出到终端。__dirname和__filename是 Node.js 环境提供的全局变量分别代表当前文件所在的目录和文件的绝对路径。这在处理文件路径时极其有用能避免硬编码路径带来的问题。我们用node 文件名来执行一个 JavaScript 文件。3.2 理解 CommonJS 模块require与module.exportsNode.js 早期使用 CommonJS 模块系统这也是为什么上面代码里用了require。模块化让你能把代码拆分到不同文件。在同一个目录下新建一个mathUtils.js文件// mathUtils.js function add(a, b) { return a b; } function multiply(a, b) { return a * b; } // 将函数暴露出去供其他文件使用 module.exports { add, multiply };修改app.js引入并使用这个模块// app.js const math require(./mathUtils); // 注意./ 表示当前目录 console.log(3 5 , math.add(3, 5)); console.log(3 * 5 , math.multiply(3, 5));再次运行node app.js你会看到计算结果。这就是 Node.js 后端开发的基础模式将功能拆分成模块通过require引入通过module.exports导出。现代的 Node.js 项目也支持 ES Modules使用import/export语法但 CommonJS 依然广泛存在你必须熟悉。4. 使用 npm管理项目依赖的核心npmNode Package Manager是和 Node.js 捆绑安装的包管理器。前端项目里那些成千上万的库如lodash,axios,express都是通过 npm 来安装和管理的。4.1 初始化项目与package.json每个 Node.js 项目都应该有一个package.json文件它相当于项目的“身份证”和“说明书”记录了项目信息、依赖包、脚本命令等。在nodejs-demo目录下运行npm init -y-y参数表示全部使用默认配置快速生成。执行后你会看到目录下多了一个package.json文件。打开看看里面包含了项目名、版本、描述、入口文件等信息。4.2 安装第三方包以axios为例假设我们想安装axios这个流行的 HTTP 客户端库。安装到项目依赖npm install axios运行后你会看到多了一个node_modules文件夹里面是axios及其所有依赖的代码。这个文件夹通常很大不要提交到 git应该在.gitignore文件中忽略它。package.json文件里多了一个dependencies字段里面记录了axios: ^1.6.0版本号可能不同。多了一个package-lock.json文件锁定所有依赖的确切版本确保团队协作或重新安装时版本一致。这个文件一定要提交到 git。在代码中使用 新建一个fetchDemo.js文件const axios require(axios); // 引入安装的包 axios.get(https://api.github.com/users/github) .then(response { console.log(GitHub 用户数据, response.data.login); }) .catch(error { console.error(请求出错, error.message); });运行node fetchDemo.js你会看到控制台打印出 “github”。恭喜你成功使用了一个第三方库4.3 安装类型dependenciesvsdevDependenciesnpm install 包名安装到dependencies这是项目运行时必需的包如express,axios。npm install 包名 --save-dev安装到devDependencies这是只在开发阶段需要的包如测试框架jest、代码格式化工具prettier、打包工具webpack。区分它们有助于减少生产环境的依赖体积。5. 搭建一个简单的 Web 服务器理解 Node.js 的核心能力Node.js 最经典的用途就是创建 Web 服务器。我们用内置的http模块来感受一下。5.1 使用内置http模块新建一个server.js文件// 1. 导入 http 模块 const http require(http); // 2. 创建服务器对象 const server http.createServer((req, res) { // req: 请求对象包含客户端发来的信息URL方法头等 // res: 响应对象用于向客户端返回信息 console.log(收到请求${req.method} ${req.url}); // 设置响应头告诉浏览器返回的是 HTML 文本编码是 utf-8 res.writeHead(200, { Content-Type: text/html; charsetutf-8 }); // 写入响应体 res.write(h1你好Node.js 服务器/h1); res.write(p这是一个简单的 HTTP 服务器。/p); // 结束响应 res.end(); }); // 3. 启动服务器监听 3000 端口 const PORT 3000; server.listen(PORT, () { console.log(服务器运行在 http://localhost:${PORT}/); });运行node server.js然后在浏览器中访问http://localhost:3000你就能看到网页了。在终端里你也能看到每次访问的日志。5.2 使用 Express 框架简化开发原生http模块比较底层。实际开发中我们更常用Express这样的框架。它封装了路由、中间件等常用功能让开发更高效。安装 Expressnpm install express新建expressServer.jsconst express require(express); const app express(); const PORT 3000; // 定义一个路由当访问根路径 / 时返回 “Hello Express” app.get(/, (req, res) { res.send(Hello Express); }); // 定义另一个路由 app.get(/about, (req, res) { res.send(h1关于我们/h1p这是一个 Express 应用。/p); }); // 启动服务器 app.listen(PORT, () { console.log(Express 服务器运行在 http://localhost:${PORT}); });运行node expressServer.js分别访问http://localhost:3000/和http://localhost:3000/about体验路由的区别。从这里开始你就正式进入 Node.js 后端开发的大门了。后续你可以学习路由、中间件、连接数据库、用户认证等。6. 前端项目部署连接前后端的最后一环很多新手学完前端HTML, CSS, JS, Vue, React后卡在“怎么让别人访问我的网站”。这就是部署。对于纯静态前端项目部署很简单。6.1 使用serve快速启动静态服务器假设你有一个用 Vue 或 React 写完的前端项目已经执行npm run build生成了一个dist或build文件夹里面是压缩优化后的 HTML, JS, CSS 文件。全局安装一个轻量级静态文件服务器工具比如servenpm install -g serve-g代表全局安装这样你可以在任何目录使用serve命令。进入你的前端项目构建输出目录cd /path/to/your-project/dist启动静态服务器serve -s .-s参数代表单页应用模式对于 Vue Router 的 history 模式或 React Router 很重要.代表当前目录。终端会输出一个本地地址如http://localhost:3000和一个网络可访问的地址。你可以在本地浏览器访问也可以将网络地址分享给同一局域网内的其他人临时访问。6.2 理解与 Apache/Nginx 的区别热词里提到了“node.js 与 apache 服务器的区别”。这是两个层面的东西Apache/Nginx是专业的Web 服务器或反向代理服务器。它们擅长处理静态文件如图片、CSS、JS、负载均衡、SSL 加密等。在生产环境中我们通常用它们来“托管”Node.js 应用。Node.js是一个JavaScript 运行时环境。我们用 Express、Koa 等框架在它之上构建的是Web 应用服务器负责处理业务逻辑、动态数据、API 接口。典型的部署流程是你在服务器上安装 Node.js运行你的app.jsExpress 应用。Node.js 应用监听某个端口比如3000。配置 Nginx将来自互联网 80/443 端口的请求反向代理到本地的3000端口。用户访问你的域名Nginx 接收请求并转发给 Node.js 应用处理Node.js 处理完再将结果通过 Nginx 返回给用户。这样Nginx 负责“对外接待”和“分发静态文件”Node.js 专心处理“动态业务”。对于新手可以先在本地或云服务器上直接用node app.js跑起来理解这个过程再逐步学习 Nginx 配置。7. 常见问题与排查清单新手避坑指南根据热词和常见问题我整理了一份新手高频踩坑清单。遇到问题按这个顺序排查能解决90%的麻烦。7.1 安装与版本问题‘node‘ 不是内部或外部命令原因Node.js 安装路径未添加到系统环境变量PATH。解决检查安装路径手动将路径如C:\Program Files\nodejs\添加到用户或系统的PATH变量中然后重启所有终端窗口。安装特定版本失败如提示未发布原因使用了错误的版本号或第三方包管理器的缓存问题。解决始终从 Node.js 官网下载 LTS 版本。如果使用nvm或nvs等版本管理工具先更新工具本身的版本列表缓存如nvm list available。权限错误尤其在 macOS/Linux 或全局安装时现象npm install -g时报EACCES权限错误。解决不要使用sudo正确方法是更改 npm 全局安装目录的所有权或者使用nvm来管理 Node.js它会将一切安装在你的用户目录下避免权限问题。7.2 模块与依赖问题Error: Cannot find module ‘xxx‘原因1第三方模块项目目录下没有node_modules或者该模块未安装。解决在项目根目录有package.json的目录运行npm install。原因2自定义模块require的路径写错了。解决检查路径。require(‘./myModule‘)是相对路径require(‘my-package‘)是查找node_modules。npm install速度慢或失败原因默认源registry在国外。解决更换为国内镜像源如淘宝源。npm config set registry https://registry.npmmirror.com/安装特定包时也可以使用--registry参数。7.3 运行与调试问题端口被占用Error: listen EADDRINUSE: address already in use :::3000原因已经有其他程序可能是你之前未退出的 Node.js 进程占用了 3000 端口。解决更改代码中的端口号如改为3001。找到并终止占用端口的进程。Windows:netstat -ano | findstr :3000找到 PID然后taskkill /PID PID /F。macOS/Linux:lsof -i :3000找到 PID然后kill -9 PID。代码修改后服务器没更新原因Node.js 是运行时加载文件修改代码后需要重启进程才能生效。解决停止当前进程在终端按CtrlC然后重新运行node app.js。开发时可以使用nodemon工具它能监听文件变化自动重启。npm install --save-dev nodemon # 然后在 package.json 的 scripts 里添加 # dev: nodemon server.js # 运行 npm run dev 启动异步操作导致的问题现象代码逻辑看起来对但数据没拿到或顺序不对。原因Node.js 大量操作是异步的如读文件、网络请求、数据库查询。不能再用“顺序执行”的思维。解决深入学习回调函数 (Callback)、Promise和async/await语法。这是 Node.js 编程的核心难点也是必须跨过的坎。7.4 项目结构与进阶方向当你熟悉了以上基础可以开始规划一个更真实的项目结构my-node-app/ ├── node_modules/ # 依赖包.gitignore忽略 ├── src/ # 源代码目录 │ ├── controllers/ # 控制器处理业务逻辑 │ ├── routes/ # 路由定义 │ ├── models/ # 数据模型如果连接数据库 │ ├── middleware/ # 中间件 │ └── app.js # 应用主入口 ├── public/ # 静态资源图片、样式等 ├── .gitignore # Git忽略文件配置 ├── package.json # 项目配置和依赖 ├── package-lock.json # 依赖锁文件 └── README.md # 项目说明下一步可以学习数据库学习用mongoose连接 MongoDB或用sequelize、prisma连接 MySQL/PostgreSQL。用户认证学习 Session/Cookie 或 JWTJSON Web Token。RESTful API 设计学习如何设计清晰、规范的接口。测试学习用jest或mocha为你的代码写单元测试和集成测试。日志与错误处理学习使用winston、morgan等记录日志并统一处理错误。使用 TypeScript为你的 Node.js 项目增加类型安全提升开发效率和代码质量。记住Node.js 的学习是一个“先跑通再理解后优化”的过程。不要一开始就追求完美的架构和设计模式。先确保你能用最简单的代码实现功能让它跑起来。遇到问题就利用好错误信息、终端日志和搜索引擎Stack Overflow、官方文档大部分你遇到的坑前人都已经踩过并给出了答案。动手写多调试是学习编程最快的方式。