Skip to content

Node.js 基础入门

什么是 Node.js?

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,允许在服务器端运行 JavaScript 代码。

核心特性

  • 事件驱动:基于事件循环的异步 I/O 模型
  • 非阻塞 I/O:高效的网络和文件操作
  • 单线程:主线程处理事件循环,工作线程处理耗时操作
  • 跨平台:支持 Windows、macOS、Linux

安装 Node.js

方式一:官网安装

访问 Node.js 官网 下载对应平台的安装包。

方式二:使用包管理器

bash
# Windows (使用 Chocolatey)
choco install nodejs

# macOS (使用 Homebrew)
brew install node

# Linux (使用 apt)
sudo apt install nodejs npm

验证安装

bash
node --version
npm --version

第一个 Node.js 程序

创建 app.js 文件:

javascript
// app.js
console.log('Hello, Node.js!');

// 使用内置模块
const http = require('http');

const server = http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Hello, Node.js Server!');
});

server.listen(3000, () => {
    console.log('Server running at http://localhost:3000/');
});

运行程序:

bash
node app.js

核心模块

fs 文件系统模块

javascript
const fs = require('fs');

// 读取文件(异步)
fs.readFile('file.txt', 'utf8', (err, data) => {
    if (err) throw err;
    console.log(data);
});

// 读取文件(同步)
const data = fs.readFileSync('file.txt', 'utf8');

// 写入文件
fs.writeFile('output.txt', 'Hello World', (err) => {
    if (err) throw err;
    console.log('File saved!');
});

path 路径模块

javascript
const path = require('path');

// 路径拼接
const filePath = path.join(__dirname, 'files', 'data.txt');

// 获取文件名
const fileName = path.basename(filePath);

// 获取扩展名
const ext = path.extname(filePath);

http 模块

javascript
const http = require('http');

const server = http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.end(JSON.stringify({ message: 'Hello World' }));
});

server.listen(3000);

包管理

初始化项目

bash
npm init
# 或使用默认配置
npm init -y

安装依赖

bash
# 安装生产依赖
npm install express

# 安装开发依赖
npm install --save-dev nodemon

# 全局安装
npm install -g typescript

package.json 说明

json
{
  "name": "my-app",
  "version": "1.0.0",
  "description": "项目描述",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "dev": "nodemon index.js"
  },
  "dependencies": {
    "express": "^4.18.0"
  },
  "devDependencies": {
    "nodemon": "^2.0.0"
  }
}

常用命令

bash
# 安装依赖
npm install

# 运行脚本
npm run start
npm run dev

# 查看已安装包
npm list

# 更新包
npm update

# 卸载包
npm uninstall express

异步编程

回调函数

javascript
const fs = require('fs');

fs.readFile('file.txt', 'utf8', (err, data) => {
    if (err) {
        console.error('Error:', err);
        return;
    }
    console.log(data);
});

Promise

javascript
const fs = require('fs').promises;

fs.readFile('file.txt', 'utf8')
    .then(data => console.log(data))
    .catch(err => console.error('Error:', err));

async/await

javascript
const fs = require('fs').promises;

async function readFile() {
    try {
        const data = await fs.readFile('file.txt', 'utf8');
        console.log(data);
    } catch (err) {
        console.error('Error:', err);
    }
}

readFile();

环境变量

使用 process.env

javascript
// 获取环境变量
const port = process.env.PORT || 3000;
const dbUrl = process.env.DATABASE_URL;

console.log(`Server running on port ${port}`);

使用 .env 文件

安装 dotenv:

bash
npm install dotenv

使用:

javascript
require('dotenv').config();

const port = process.env.PORT;
const dbUrl = process.env.DATABASE_URL;

最佳实践

  1. 错误处理:始终处理异步操作的错误
  2. 使用 async/await:提高代码可读性
  3. 环境变量:敏感信息使用环境变量
  4. 模块化:将代码拆分为独立模块
  5. 日志记录:使用日志库记录重要信息

最后更新:2025年

这是我的个人文档