Node.js应用场景

学完Node.js的特点,你可能要问:这玩意儿到底能干嘛?这节课就给你盘点一下Node.js最擅长的那些场景。

一、 RESTful API 服务

这是Node.js最经典的应用场景。

为什么适合?

用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写的:

写自己的CLI

!/usr/bin/env node

console.log('Hello CLI!');

发布到npm后,全世界都能用:

npm publish npm install -g 我的CLI工具

四、 前后端同构开发

同一个项目里,前后端都用JavaScript:

好处:

五、 静态网站和SSR

静态网站生成器

服务端渲染(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特别适合:

用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也能写桌面应用:

这些全是Electron写的!

总结:什么时候选Node.js

✅ 适合:

❌ 不适合:

总的来说,Node.js最适合I/O密集型、实时性强、需要快速迭代的项目。选技术最重要的是看场景,合适的就是最好的!

下节课我们聊聊Node.js和浏览器JavaScript的区别,敬请期待!