【Node.js入门教程:从零到精通】

发布于:2025-03-27 ⋅ 阅读:(26) ⋅ 点赞:(0)

一、环境搭建与基础验证

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 技能成长路线图

基础语法
核心模块
NPM生态
异步编程
框架开发
微服务架构
性能优化
安全防护

推荐学习资源:

  • 《Node.js设计模式》
  • 官方文档精读(https://nodejs.org)