Node.js应用场景
学完Node.js的特点,你可能要问:这玩意儿到底能干嘛?这节课就给你盘点一下Node.js最擅长的那些场景。
一、 RESTful API 服务
这是Node.js最经典的应用场景。
为什么适合?
- 处理大量并发请求能力强
- JSON处理那是原生支持
- npm生态里好用的框架一抓一大把
用Express写个API
const express = require('express'); const app = express();
// 获取用户列表 app.get('/api/users', (req, res) => { res.json([ { id: 1, name: '小明' }, { id: 2, name: '小红' } ]); });
// 获取单个用户 app.get('/api/users/:id', (req, res) => { res.json({ id: req.params.id, name: '用户' + req.params.id }); });
app.listen(3000);
这就是一个完整的RESTful API!
二、 实时聊天应用
聊天室、在线客服、协作工具,这些需要双向通信的应用,Node.js是首选。
WebSocket + Socket.io
// 服务端 const io = require('socket.io')(3000);
io.on('connection', (socket) => { console.log('有新用户来了:' + socket.id);
// 收到消息广播给所有人 socket.on('message', (msg) => { io.emit('message', msg); });
// 用户断开 socket.on('disconnect', () => { console.log('用户走了'); }); });
// 前端 const socket = io(); socket.emit('message', '你好'); socket.on('message', (msg) => console.log(msg));
实时性拉满!
三、 命令行工具(CLI)
前端开发者天天用的工具基本都是Node.js写的:
- npm / yarn - 包管理
- webpack - 构建工具
- vite - 新一代构建工具
- eslint - 代码检查
- prettier - 代码格式化
写自己的CLI
!/usr/bin/env node
console.log('Hello CLI!');
发布到npm后,全世界都能用:
npm publish npm install -g 我的CLI工具
四、 前后端同构开发
同一个项目里,前后端都用JavaScript:
- 后端用Node.js + Express/Koa
- 前端用React/Vue/Angular
好处:
- 代码复用(比如表单验证)
- 团队技术栈统一
- 开发体验一致
五、 静态网站和SSR
静态网站生成器
- Next.js (React)
- Nuxt.js (Vue)
- Gatsby
服务端渲染(SSR)
首屏加载慢?SEO不好?用SSR解决:
// Next.js 页面 function Home() { return
Hello SSR!
; }export async function getServerSideProps() { // 在服务端获取数据 const data = await fetchData(); return { props: { data } }; }
export default Home;
六、 微服务架构
把大应用拆成小服务,Node.js特别适合:
- 启动快
- 占用资源少
- 适合处理I/O密集型任务
用NestJS写微服务
import { Controller, Get } from '@nestjs/common';
@Controller('users') export class UsersController { @Get() findAll() { return [{ id: 1, name: '小明' }]; } }
七、 爬虫和数据抓取
爬网页、解析HTML,Node.js很在行:
const axios = require('axios'); const cheerio = require('cheerio');
async function crawl() { const res = await axios.get('https://example.com'); const $ = cheerio.load(res.data);
// 提取所有标题 $('h1').each((i, el) => { console.log($(el).text()); }); }
crawl();
高级点的,用Puppeteer无头浏览器:
const puppeteer = require('puppeteer');
(async () => { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://example.com'); const title = await page.title(); console.log(title); await browser.close(); })();
八、 流媒体服务
视频、直播、文件流,Node.js处理起来666:
const fs = require('fs'); const http = require('http');
http.createServer((req, res) => { const stream = fs.createReadStream('video.mp4');
res.writeHead(200, { 'Content-Type': 'video/mp4', 'Content-Length': fs.statSync('video.mp4').size });
stream.pipe(res); }).listen(3000);
边读边发,内存占用低。
九、 WebSocket实时推送
股票行情、消息通知、在线状态,用WebSocket:
const WebSocket = require('ws'); const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', (ws) => { // 定时推送数据 setInterval(() => { ws.send(JSON.stringify({ time: new Date(), price: Math.random() * 100 })); }, 1000); });
十、 物联网(IoT)
树莓派上跑Node.js,掌控硬件:
const rpi = require('rpi-gpio');
// 控制LED灯 rpi.setup('wiringPi'); rpi.write(7, true, (err) => { if (err) throw err; console.log('灯亮了'); });
读取传感器数据、上报云端,智能家居轻松做。
十一、 代理和中间层
做API网关、反向代理:
const express = require('express'); const axios = require('axios'); const app = express();
// 聚合多个API app.get('/api/all', async (req, res) => { const [users, posts] = await Promise.all([ axios.get('https://api.example.com/users'), axios.get('https://api.example.com/posts') ]); res.json({ users: users.data, posts: posts.data }); });
// 缓存、限流、鉴权都可以在这里加
十二、 桌面应用
用Electron,JavaScript也能写桌面应用:
- VS Code
- Slack
- Discord
- 飞书
这些全是Electron写的!
总结:什么时候选Node.js
✅ 适合:
- API服务
- 实时应用
- 前后端同构
- CLI工具
- 爬虫
- 轻量级微服务
❌ 不适合:
- CPU密集型(视频编码、复杂计算)
- 大型单体应用(用Java更合适)
- 强类型项目(考虑Java/C#)
总的来说,Node.js最适合I/O密集型、实时性强、需要快速迭代的项目。选技术最重要的是看场景,合适的就是最好的!
下节课我们聊聊Node.js和浏览器JavaScript的区别,敬请期待!