一、环境搭建与基础验证
1.1 版本选择策略
# LTS版本推荐(2023)
nvm install 18.16.0
nvm alias default 18.16.0
# 验证安装
node -v
npm -v
版本管理技巧:
- 生产环境优先使用LTS版本
- 开发环境可尝试Current版本新特性
- 使用
nvm
管理多版本(Windows推荐nvm-windows
)
1.2 第一个HTTP服务器
// server.js
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello Node.js\n');
});
server.listen(3000, () => {
console.log('Server running at http://localhost:3000/');
});
运行与测试:
node server.js
curl http://localhost:3000
二、核心模块深度解析
2.1 事件循环机制
// 事件循环阶段演示
const fs = require('fs');
console.log('Start');
setTimeout(() => {
console.log('Timeout');
}, 0);
fs.readFile(__filename, () => {
console.log('File Read');
});
Promise.resolve().then(() => {
console.log('Promise');
});
process.nextTick(() => {
console.log('Next Tick');
});
console.log('End');
输出顺序解析:
Start
End
Next Tick
Promise
Timeout
File Read
2.2 流式处理实战
// 文件压缩示例
const fs = require('fs');
const zlib = require('zlib');
const readStream = fs.createReadStream('input.txt');
const writeStream = fs.createWriteStream('output.txt.gz');
const gzip = zlib.createGzip();
readStream
.pipe(gzip)
.pipe(writeStream)
.on('finish', () => {
console.log('压缩完成');
});
三、NPM包管理精髓
3.1 包版本控制策略
{
"dependencies": {
"express": "^4.18.2", // 允许小版本更新
"lodash": "~4.17.21", // 仅允许补丁更新
"react": "18.2.0" // 固定版本
}
}
3.2 脚本优化技巧
{
"scripts": {
"dev": "node --experimental-specifier-resolution=node --watch server.js",
"prod": "NODE_ENV=production node dist/index.js",
"lint": "eslint . --ext .js",
"format": "prettier --write ."
}
}
四、异步编程进阶
4.1 async/await错误处理
// 异常处理最佳实践
async function fetchData() {
try {
const response = await fetch('https://api.example.com/data');
if (!response.ok) throw new Error('HTTP error');
return await response.json();
} catch (error) {
console.error('请求失败:', error);
throw error;
}
}
4.2 并发控制策略
// 限制并发请求数
async function processInBatches(tasks, batchSize) {
let index = 0;
while(index < tasks.length) {
await Promise.all(tasks.slice(index, index += batchSize)
.map(async task => await task()));
}
}
五、企业级项目架构
5.1 RESTful API设计规范
// Express路由示例
const express = require('express');
const router = express.Router();
// GET /api/users
router.get('/users', async (req, res) => {
try {
const users = await User.find().limit(10);
res.status(200).json(users);
} catch (error) {
res.status(500).json({ error: 'Internal Server Error' });
}
});
module.exports = router;
5.2 微服务通信方案
// gRPC服务端实现
const grpc = require('@grpc/grpc-js');
const protoLoader = require('@grpc/proto-loader');
const packageDefinition = protoLoader.loadSync('user.proto');
const userProto = grpc.loadPackageDefinition(packageDefinition);
const server = new grpc.Server();
server.addService(userProto.UserService.service, {
GetUser: (call, callback) => {
// 业务逻辑实现
}
});
server.bindAsync('0.0.0.0:50051', grpc.ServerCredentials.createInsecure(), () => {
server.start();
});
六、生产环境优化
6.1 性能调优清单
// PM2集群模式配置
module.exports = {
apps: [{
name: 'my-app',
script: 'dist/index.js',
instances: 'max',
exec_mode: 'cluster',
watch: true,
merge_logs: true,
env: {
NODE_ENV: 'production',
PORT: 3000
}
}]
}
6.2 安全加固策略
// Helmet安全中间件配置
const helmet = require('helmet');
app.use(helmet({
contentSecurityPolicy: {
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'", 'trusted-cdn.com']
}
},
referrerPolicy: { policy: 'strict-origin-when-cross-origin' }
}));
七、全栈项目实战
技术栈选型:
- 框架:Express.js + Socket.IO
- 数据库:MongoDB + Mongoose
- 身份验证:JWT + Passport.js
- 日志:Winston + Morgan
- 部署:Docker + Nginx
7.2 核心功能实现
// 文章发布接口(含权限控制)
router.post('/articles',
passport.authenticate('jwt', { session: false }),
validateArticleSchema,
async (req, res) => {
const { title, content } = req.body;
const article = new Article({
title,
content,
author: req.user._id
});
try {
await article.save();
res.status(201).json(article);
} catch (error) {
res.status(400).json({ error: '保存失败' });
}
});
八、学习路径规划
8.1 技能成长路线图
推荐学习资源:
- 《Node.js设计模式》
- 官方文档精读(https://nodejs.org)