温馨提示×

Node.js如何在Linux上进行API开发

小樊
36
2025-12-24 07:31:49
栏目: 编程语言

在 Linux 上进行 Node.js API 开发

一 环境准备与安装

  • 选择 Node.js LTS 版本,优先使用 nvm 管理多版本,便于切换与回滚。示例:
    • 安装 nvm:curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
    • 重新加载:source ~/.bashrc
    • 安装与切换:nvm install 18 && nvm use 18
  • 验证:node -v、npm -v
  • 可选二进制安装(无 nvm 时):下载 Node.js Linux 64 位包,解压并将 bin 目录软链到 /usr/local/bin,便于全局使用。

二 初始化项目与最小 API

  • 初始化与依赖:
    • mkdir my-api && cd my-api
    • npm init -y
    • npm i express cors helmet morgan
    • npm i -D nodemon
  • 最小 Express 服务(app.js):
    • 代码示例:
      • const express = require(‘express’); const cors = require(‘cors’); const helmet = require(‘helmet’); const morgan = require(‘morgan’);
      • const app = express(); const port = process.env.PORT || 3000;
      • app.use(helmet()); app.use(morgan(‘combined’)); app.use(cors()); app.use(express.json());
      • app.get(‘/api/hello’, (req, res) => res.json({ message: ‘Hello, World’ }));
      • app.listen(port, () => console.log(Server running on :${port}));
  • 开发运行:npx nodemon app.js(代码变更自动重启)

三 连接数据库与数据校验

  • 数据库示例(以 MySQL 为例):
    • 安装驱动:npm i mysql2
    • 连接池示例:
      • const mysql = require(‘mysql2/promise’);
      • const pool = mysql.createPool({ host: ‘localhost’, user: ‘root’, password: ‘pwd’, database: ‘test’, waitForConnections: true, connectionLimit: 10, queueLimit: 0 });
      • app.get(‘/api/users’, async (req, res, next) => { try { const [rows] = await pool.query(‘SELECT id, name FROM users’); res.json({ data: rows }); } catch (err) { next(err); } });
  • 数据校验与错误处理:
    • 校验:npm i joi 或 express-validator
    • 统一错误处理中间件(示例):
      • app.use((err, req, res, next) => { const status = err.status || 500; res.status(status).json({ error: err.message }); });

四 运行与进程守护

  • 使用 PM2 守护与集群:
    • 全局安装:npm i -g pm2
    • 启动与集群:pm2 start app.js -i max --name my-api
    • 常用:pm2 status、pm2 logs my-api、pm2 startup(开机自启)
  • 使用 systemd 托管(可选):
    • 创建服务文件 /etc/systemd/system/node-api.service:
      • [Unit] Description=Node.js API Service
      • After=network.target
      • [Service] ExecStart=/usr/bin/node /opt/my-api/app.js
      • Restart=always User=nodejs Group=nodejs Environment=NODE_ENV=production
      • WorkingDirectory=/opt/my-api
      • [Install] WantedBy=multi-user.target
    • 启用:systemctl daemon-reload && systemctl enable --now node-api

五 反向代理 安全与部署

  • Nginx 反向代理与静态资源:
    • 安装:sudo apt-get install nginx
    • 配置示例(/etc/nginx/sites-available/default):
      • server { listen 80; server_name your_domain.com;
        • location / { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection ‘upgrade’; }
        • location /static/ { alias /opt/my-api/public/; expires 1y; add_header Cache-Control “public, immutable”; }
      • }
    • 重启:sudo systemctl restart nginx
  • HTTPS:使用 Certbot 获取 Let’s Encrypt 证书,Nginx 终止 TLS,提升安全与性能
  • 防火墙与安全组
    • 云服务器需放通对应端口(如 80/443/3000);如使用云厂商安全组,添加入站规则
  • 容器化(可选):
    • Dockerfile 示例:
      • FROM node:18-alpine
      • WORKDIR /app
      • COPY package*.json ./
      • RUN npm ci --only=production
      • COPY . .
      • EXPOSE 3000
      • CMD [“node”,“app.js”]
    • 构建与运行:docker build -t my-api . && docker run -p 3000:3000 my-api
  • API 设计与运维要点
    • 遵循 REST 语义与状态码;启用 CORS 策略;为接口增加 限流;对外提供 健康检查 /health;结构化日志(如 Winston/Pino);监控告警(如 Prometheus/Grafana

0