Skip to content

Node.js 后端开发指南

目录

基础入门

环境搭建

bash
# 安装 Node.js
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
nvm install node

# 验证安装
node --version
npm --version

包管理

bash
# 初始化项目
npm init

# 安装依赖
npm install express
npm install --save-dev nodemon

# 使用 yarn
yarn add express
yarn add -D nodemon

模块系统

javascript
// CommonJS 模块
const express = require('express');
module.exports = {};

// ES 模块
import express from 'express';
export default {};

Web 开发

Express 框架

javascript
const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(3000, () => {
  console.log('Server running on port 3000');
});

Koa 框架

javascript
const Koa = require('koa');
const app = new Koa();

app.use(async ctx => {
  ctx.body = 'Hello World';
});

app.listen(3000);

NestJS 框架

typescript
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}

API 开发

RESTful API

javascript
// Express 实现 RESTful API
app.get('/api/users', (req, res) => {
  // 获取用户列表
});

app.post('/api/users', (req, res) => {
  // 创建用户
});

app.put('/api/users/:id', (req, res) => {
  // 更新用户
});

app.delete('/api/users/:id', (req, res) => {
  // 删除用户
});

GraphQL

javascript
const { ApolloServer, gql } = require('apollo-server-express');

const typeDefs = gql`
  type Query {
    hello: String
  }
`;

const resolvers = {
  Query: {
    hello: () => 'Hello World!'
  }
};

const server = new ApolloServer({ typeDefs, resolvers });

WebSocket

javascript
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(message) {
    console.log('received: %s', message);
  });

  ws.send('something');
});

数据库操作

MongoDB

javascript
const mongoose = require('mongoose');

const userSchema = new mongoose.Schema({
  name: String,
  email: String
});

const User = mongoose.model('User', userSchema);

MySQL

javascript
const mysql = require('mysql2/promise');

const connection = await mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'password',
  database: 'test'
});

Redis

javascript
const Redis = require('ioredis');
const redis = new Redis();

await redis.set('key', 'value');
const value = await redis.get('key');

性能优化

内存管理

javascript
// 使用流处理大文件
const fs = require('fs');
const readStream = fs.createReadStream('large-file.txt');
const writeStream = fs.createWriteStream('output.txt');

readStream.pipe(writeStream);

并发处理

javascript
// 使用 Worker Threads
const { Worker, isMainThread, parentPort } = require('worker_threads');

if (isMainThread) {
  const worker = new Worker(__filename);
  worker.on('message', (msg) => console.log(msg));
} else {
  parentPort.postMessage('Hello from worker!');
}

缓存策略

javascript
// 使用 Redis 缓存
const cache = async (key, data) => {
  await redis.set(key, JSON.stringify(data), 'EX', 3600);
};

const getCached = async (key) => {
  const data = await redis.get(key);
  return data ? JSON.parse(data) : null;
};

部署运维

Docker 部署

dockerfile
FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

PM2 进程管理

bash
# 启动应用
pm2 start app.js

# 监控
pm2 monit

# 日志
pm2 logs

监控告警

javascript
// 使用 Prometheus 监控
const prometheus = require('prom-client');
const counter = new prometheus.Counter({
  name: 'http_requests_total',
  help: 'Total number of HTTP requests'
});

最佳实践

1. 项目结构

project/
├── src/
│   ├── controllers/
│   ├── models/
│   ├── services/
│   ├── routes/
│   └── utils/
├── tests/
├── config/
├── logs/
└── package.json

2. 代码规范

  • 使用 ESLint
  • 使用 Prettier
  • 遵循 Airbnb 规范
  • 编写单元测试

3. 安全实践

  • 使用 helmet
  • 输入验证
  • 错误处理
  • 日志记录

学习资源

官方文档

视频课程

  • 慕课网
  • 极客时间
  • B站技术区
  • YouTube 技术频道

工具推荐

启航团队技术文档