
第01期 | Node.js是什么JavaScript的另一半世界 学习目标理解Node.js到底是什么它和浏览器里的JavaScript有什么本质区别了解Node.js的诞生背景、发展历程和2026年的行业地位掌握Node.js的核心应用场景知道它能做什么、不能做什么写出你的第一个Node.js程序理解JavaScript跑在服务器上意味着什么建立前端→全栈的技术认知为后续49期学习打下思维基础 核心知识一、一个灵魂拷问JavaScript只能在浏览器里跑吗如果你之前做过前端开发你对JavaScript的认知大概率是这样的写HTML页面加script标签引入JS操作DOM让网页动起来发AJAX请求和后端要数据用框架React/Vue写组件在这个过程中JavaScript是被浏览器圈养的。浏览器提供了一个沙箱环境JS只能在这个沙箱里活动——它能操作网页但不能直接读写你电脑硬盘上的文件不能监听一个网络端口更不能启动一个服务器。Node.js做的事情就是把JavaScript从浏览器的沙箱里放出来。2009年一个叫Ryan Dahl的程序员做了一个大胆的尝试他把Google Chrome浏览器的V8 JavaScript引擎抠了出来嫁接上了C写的系统级API文件操作、网络通信、进程管理然后让JavaScript可以直接调用这些底层能力。这个组合就是Node.js。用一句话总结Node.js V8引擎 系统级APIC绑定 事件循环V8引擎负责解析和执行JavaScript代码系统级API让JS拥有操作系统级别的权限事件循环让Node.js可以用单线程处理高并发。二、浏览器JS vs Node.js一张表看清本质区别很多初学者会困惑同样是JavaScript为什么在浏览器和Node.js里差别这么大核心原因是运行环境不同提供的API不同。维度浏览器中的JavaScriptNode.js中的JavaScript运行环境浏览器Chrome/Firefox/Safari操作系统直接跑在服务器/电脑上全局对象window/documentglobal/processDOM操作✅ 可以操作网页元素❌ 没有DOM没有网页概念文件系统❌ 不能读写本地文件✅ 可以读写、监听、删除文件网络服务❌ 只能发请求不能监听端口✅ 可以创建HTTP/TCP/UDP服务器模块系统ES Modulesimport/exportCommonJSrequire/module.exports ESM操作系统交互❌ 无权限✅ 可以执行命令、管理进程、获取系统信息多线程Web Workers受限Worker Threads / Cluster定时器setTimeout/setInterval相同但精度和机制有差异网络请求fetch/XMLHttpRequesthttp模块/axios/fetch(Node 18)关键认知JavaScript语言本身语法、变量、函数、对象、原型链、Promise等在浏览器和Node.js中是完全一样的。区别只在于运行环境给你提供了什么API。举个代码例子同样是读取一个文件的内容浏览器里受限于安全策略只能通过用户选择文件// 浏览器中读取文件必须用户主动选择constfileInputdocument.createElement(input);fileInput.typefile;fileInput.onchange(e){constfilee.target.files[0];constreadernewFileReader();reader.onload(event){console.log(文件内容,event.target.result);};reader.readAsText(file);};fileInput.click();// 必须用户点击选择Node.js里直接读取硬盘上的任意文件// Node.js中读取文件直接指定路径constfsrequire(fs);// 同步读取constcontentfs.readFileSync(./hello.txt,utf-8);console.log(文件内容,content);// 异步读取推荐fs.readFile(./hello.txt,utf-8,(err,data){if(err)throwerr;console.log(文件内容,data);});// Promise方式更现代constfsprequire(fs).promises;fsp.readFile(./hello.txt,utf-8).then(dataconsole.log(文件内容,data)).catch(errconsole.error(出错了,err));在Node.js里你不需要用户的许可不需要弹窗选择文件你直接告诉它路径它就给你读。这就是服务器端JavaScript的权力。三、Node.js的诞生背景解决一个核心痛点要真正理解Node.js为什么存在我们需要回到2009年的技术背景。当年的痛点当一个用户在网页上操作比如点击按钮、输入文字前端需要把这个操作发给服务器处理。服务器收到请求后可能需要查数据库、调用其他接口、做计算——这些操作都需要等待I/O输入/输出。传统的服务器如Apache PHP处理I/O的方式是一个请求开一个线程。线程在等待数据库返回的时候是阻塞的——它什么都不干但占着内存。如果同时有10000个用户访问服务器就要开10000个线程内存直接爆掉。Ryan Dahl的洞察I/O操作读文件、查数据库、发网络请求本质上是在等——等磁盘转、等网络传、等数据库查。在等的过程中CPU其实是空闲的。与其让线程傻等不如在等待的时候去处理别的请求。这就是事件驱动、非阻塞I/O的核心思想传统模型阻塞式 请求A → 查数据库等100ms→ 返回A 请求B在排队等... 请求B → 查数据库等100ms→ 返回B Node.js模型非阻塞 请求A → 发起数据库查询 → 立刻去处理请求B 请求B → 发起数据库查询 → 立刻去处理请求C ↓ 数据库A查完了 处理A的结果 → 返回A ↓ 数据库B查完了 处理B的结果 → 返回BNode.js用单线程 事件循环实现了这个模型。单线程不会因为I/O等待而阻塞事件循环负责在I/O完成后回调处理结果。这意味着Node.js可以用极少的内存处理大量的并发连接。这就是Node.js最适合做I/O密集型应用的原因——API服务器、实时聊天、流媒体处理等场景Node.js表现优异。四、Node.js能做什么不能做什么✅ Node.js擅长的场景1. Web API服务器最主流用Express/Koa/NestJS等框架开发RESTful API这是Node.js最常见的用途。前端发请求Node.js处理业务逻辑查数据库返回JSON。前端App → HTTP请求 → Node.js服务器 → 数据库 ← JSON响应 ← ← 查询结果 ←2. 实时应用WebSocket聊天室、在线协作、实时通知、股票行情推送——这些需要服务器主动向客户端推消息的场景Node.js的事件驱动模型天然适合。3. 服务端渲染SSRNext.js/Nuxt.js等框架用Node.js在服务端渲染React/Vue组件生成HTML返回给浏览器。解决首屏白屏和SEO问题。4. 命令行工具CLIWebpack、Vite、ESLint、TypeScript编译器——你日常用的前端工具绝大多数都是用Node.js写的。你也可以写自己的CLI工具。5. 桌面应用ElectronVS Code、Discord、飞书用Node.js Chromium做桌面应用JS既管界面又管系统调用。6. 中间层/BFFBackend for Frontend前端和后端之间加一层Node.js做接口聚合、数据裁剪、协议转换。前端只和一个Node.js服务通信不用对接多个后端微服务。7. Serverless函数云函数AWS Lambda、腾讯云SCF、Vercel大量使用Node.js。一个函数处理一个请求按调用次数计费天然适合事件驱动。❌ Node.js不擅长的场景1. CPU密集型计算图片处理、视频转码、机器学习训练、大规模数据排序——这些需要大量CPU计算的任务Node.js的单线程会成为瓶颈。一个计算任务卡住整个Node.js进程都卡住。解决方案用Worker Threads开子线程或用C插件或干脆用Python/Go/Rust处理。2. 大型企业级复杂系统虽然NestJS等框架在努力弥补但Node.js在类型安全虽然有TypeScript、事务管理、领域建模等方面相比Java/Spring Boot仍有差距。银行核心系统、ERP等超大型系统通常不选Node.js。3. 需要超高并发的计算服务如果每个请求都需要大量CPU计算如AI推理Node.js的单线程模型反而不如多线程模型。不过这种场景通常用专门的计算服务。五、2026年学Node.js的5个理由理由1前端→全栈的最短路径你已经会JavaScript了学Node.js不需要换语言。同样的语法、同样的ES6特性、同样的Promise/async-await。从前端到全栈Node.js是最低成本的路径。理由2岗位需求稳定增长2026年前端岗位的JD里熟悉Node.js已经是标配。很多公司尤其中小厂和创业公司的后端API就是Node.js写的。掌握Node.js你的可选岗位直接翻倍。理由3AI时代的基础设施大模型的API调用、Agent工具链、MCP协议——这些AI应用的底层很多都是Node.js。OpenAI SDK、LangChain.js、Vercel AI SDK都是JS生态的。学Node.js 给自己打开AI应用开发的大门。理由4工具链的核心不管你用什么框架前端的构建工具Vite/Webpack、代码检查ESLint、测试Jest都跑在Node.js上。理解Node.js 理解你的工具链遇到问题能自己排查。理由5独立开发/副业的利器想做一个全栈App用Node.js写后端API前端用React/Vue数据库用MongoDB/PostgreSQL。一个人就能搞定前后端不需要学Java/Go/Python另一门语言。六、动手实战你的第一个Node.js程序别光看理论我们来写代码。步骤1确认安装打开终端Windows用PowerShell/Git BashMac用Terminal输入node-v如果输出类似v22.12.0说明Node.js已安装。如果提示找不到命令去 nodejs.org 下载安装LTS版本。npm-vnpm是Node.js的包管理器随Node.js一起安装。输出类似10.9.0即可。步骤2创建项目mkdirmy-first-node-appcdmy-first-node-appnpminit-ynpm init -y会生成一个默认的package.json文件这是Node.js项目的配置文件。步骤3写第一个程序创建index.js文件写入// index.js - 你的第一个Node.js程序// 1. 最简单的打印一句话console.log(Hello, Node.js! );// 2. 获取命令行参数constargsprocess.argv.slice(2);console.log(你传入的参数,args);// 3. 获取当前时间constnownewDate();console.log(当前时间,now.toLocaleString(zh-CN));// 4. 获取系统信息console.log(操作系统,process.platform);console.log(Node.js版本,process.version);console.log(CPU架构,process.arch);// 5. 环境变量console.log(PATH前50个字符,process.env.PATH?.slice(0,50));// 6. 计时器console.time(计算耗时);letsum0;for(leti0;i1000000;i){sumi;}console.timeEnd(计算耗时);console.log(1到100万求和结果,sum);步骤4运行程序nodeindex.js你会看到类似输出Hello, Node.js! 你传入的参数[] 当前时间2026/7/6 18:30:00 操作系统win32 Node.js版本v22.12.0 CPU架构x64 PATH前50个字符C:\Program Files\nodejs\; 计算耗时: 3.245ms 1到100万求和结果499999500000也可以传参数运行nodeindex.js hello world输出会包含你传入的参数[hello, world]步骤5写第一个Web服务器把index.js改成// 用Node.js内置的http模块创建一个Web服务器consthttprequire(http);constserverhttp.createServer((req,res){// req: 请求对象包含请求的所有信息// res: 响应对象用来发送响应consturlreq.url;constmethodreq.method;console.log(收到请求:${method}${url});// 设置响应头res.setHeader(Content-Type,application/json; charsetutf-8);// 路由if(url/methodGET){res.statusCode200;res.end(JSON.stringify({message:欢迎来到我的第一个Node.js服务器,time:newDate().toLocaleString(zh-CN)}));}elseif(url/usersmethodGET){res.statusCode200;res.end(JSON.stringify({users:[{id:1,name:张三,age:25},{id:2,name:李四,age:30}]}));}elseif(url/healthmethodGET){res.statusCode200;res.end(JSON.stringify({status:ok,uptime:process.uptime()}));}else{res.statusCode404;res.end(JSON.stringify({error:找不到这个路径}));}});constPORT3000;server.listen(PORT,(){console.log( 服务器已启动);console.log( 访问地址: http://localhost:${PORT});console.log( 用户接口: http://localhost:${PORT}/users);console.log( 健康检查: http://localhost:${PORT}/health);console.log(按 CtrlC 停止服务器);});运行nodeindex.js然后打开浏览器访问http://localhost:3000你会看到JSON响应。这就是一个最简单的Web服务器——没有框架纯用Node.js内置的http模块。恭喜你你已经写出了第一个后端API七、新手最常见的5个误区误区1“Node.js就是用JavaScript写后端”不完全对。Node.js是用JavaScript语法 V8引擎 C绑定的运行时。写后端只是它的用途之一。它还能写CLI工具、桌面应用、脚本、Serverless函数等。误区2“Node.js是单线程所以不能用于生产”这是对单线程的误解。Node.js的主线程是单线程但底层I/O文件、网络是多线程的由libuv的线程池处理。而且可以通过Cluster模式或Worker Threads利用多核CPU。Netflix、PayPal、LinkedIn、阿里巴巴都在生产环境大量使用Node.js。误区3“学Node.js必须先精通JavaScript”不需要精通但需要掌握基础变量、函数、对象、数组方法、Promise/async-await、ES6语法。边学Node.js边巩固JS是完全可行的。但如果你连箭头函数和解构赋值都看不懂建议先补一下JS基础。误区4“Node.js只能做小型项目”NestJS TypeScript PostgreSQL的组合完全可以支撑大型企业项目。国内的字节跳动、滴滴、美团国外的Netflix、PayPal、Trello都有大规模Node.js应用。误区5“Node.js要被Deno/Bun取代了”Deno和Bun确实在性能和开发体验上有亮点但Node.js的生态npm上超过200万个包和社区是不可替代的。2026年Node.js仍然是服务端JavaScript的绝对主流。学Node.js不会过时。️ 实战练习练习1基础题 — 个人信息卡片创建card.js用console.log打印一张个人信息卡片// 要求// 1. 打印你的姓名、年龄、城市// 2. 打印当前Node.js版本和操作系统// 3. 打印一段分隔线用 - 或 组成// 格式参考// // 姓名张三// 年龄25// 城市深圳// Node版本v22.12.0// 系统win32// 练习2进阶题 — 命令行计算器创建calculator.js做一个命令行计算器# 用法nodecalculator.jsadd53# 输出: 5 3 8nodecalculator.js multiply47# 输出: 4 × 7 28nodecalculator.js power210# 输出: 2^10 1024提示用process.argv获取参数用switch或对象映射处理不同运算处理参数不足或非法输入的情况练习3挑战题 — 多路由API服务器扩展第05步的Web服务器增加以下路由GET / → 返回欢迎信息 GET /users → 返回用户列表写死3个用户 GET /users/:id → 返回指定用户信息提示需要解析URL参数 POST /users → 返回创建成功提示需要读取请求体 GET /time → 返回服务器当前时间 GET /info → 返回服务器信息Node版本、运行时长、内存使用提示用req.url和req.method做路由判断用req.on(data)和req.on(end)读取请求体用process.memoryUsage()获取内存信息用process.uptime()获取运行时长 面试考点Q1: Node.js和浏览器中的JavaScript有什么区别核心答运行环境不同。浏览器JS的全局对象是window有DOM/BOM API受同源策略限制不能直接操作文件系统。Node.js的全局对象是global有fs/http/path等模块可以直接操作文件系统、创建网络服务器、管理进程。JS语言本身语法完全一致区别在于运行环境提供的API不同。Q2: 为什么Node.js适合I/O密集型应用核心答Node.js采用单线程事件循环非阻塞I/O模型。当执行I/O操作读文件、查数据库时主线程不会等待而是继续处理其他请求。I/O完成后通过回调通知主线程处理结果。这样单线程就能处理大量并发连接不会因为I/O等待而阻塞。Q3: Node.js的单线程意味着它只有一个线程在运行吗核心答不是。Node.js的JavaScript代码在单线程主线程上执行但底层libuv有一个线程池默认4个线程处理I/O操作。此外可以通过Worker Threads创建额外的JavaScript执行线程通过Cluster模式启动多个Node.js进程利用多核CPU。Q4: Node.js的V8引擎是什么核心答V8是Google开发的开源JavaScript引擎用C编写用于Chrome浏览器和Node.js。V8负责将JavaScript代码编译成机器码执行JIT即时编译是其性能关键。Node.js把V8引擎和系统级C绑定结合让JavaScript拥有了操作系统级别的权限。 本期要点Node.js V8引擎 系统级API 事件循环让JavaScript脱离浏览器在服务器上运行浏览器JS管界面Node.js管系统——前者操作DOM后者操作文件/网络/进程单线程非阻塞I/O是Node.js的核心特性适合高并发I/O密集型场景不适合CPU密集型计算前端→全栈的最短路径不需要换语言已有JS基础直接上手2026年Node.js依然主流AI应用开发、SSR、工具链、Serverless都需要Node.js生态不可替代npm拥有200万包是最大的开源生态系统你已经写出了第一个Web服务器用http模块创建服务器、处理路由、返回JSON 下期预告第02期《环境搭建安装Node.js与开发工具配置》—— 我们会详细讲解nvm版本管理、VS Code的Node.js开发配置、npm/npx的区别与用法、以及如何用ESLintPrettier搭建一个规范的项目工程。确保你的开发环境万无一失再开始正式的编码之旅。如果你没有苹果电脑需要上传ios到APPStore可以访问以下网站iPA上传工具 - IPA解析与AppStore提交