Node.js 快速上手指南

简介: Node.js 是基于 Chrome V8 引擎的 JavaScript 运行时,让 JS 脱离浏览器运行在服务端。支持异步 I/O、跨平台,适用于构建后端 API、CLI 工具与全栈应用。本指南涵盖安装、核心模块(fs、http、path、events)、NPM 包管理、Express 实战及文件上传示例,零基础也能快速上手,掌握 Node.js 核心开发技能。

Node.js 快速上手指南
Node.js 是基于 Chrome V8 引擎的 JavaScript 运行时,让 JS 脱离浏览器运行在服务端,支持异步 I/O、跨平台,是构建后端 API、CLI 工具、全栈应用的核心技术。本文涵盖 Node.js 核心语法、常用模块和实战示例,可直接复制代码运行。
一、快速安装与入门

  1. 安装 Node.js
    Windows/Mac:下载官方安装包 nodejs.org(推荐 LTS 长期支持版);
    Linux:
    bash
    运行

    Ubuntu/Debian

    sudo apt update && sudo apt install nodejs npm

    CentOS/RHEL

    sudo yum install nodejs npm
    验证安装:
    bash
    运行
    node -v # 查看Node版本(如v20.10.0)
    npm -v # 查看npm版本(如10.2.3)
  2. 第一个 Node.js 程序
    创建 hello.js 文件,复制以下代码:
    javascript
    运行
    // hello.js
    // 控制台输出
    console.log("Hello Node.js!");

// 异步定时器(Node.js 异步特性)
setTimeout(() => {
console.log("异步执行:2秒后输出");
}, 2000);
运行代码:
bash
运行
node hello.js
输出结果:
plaintext
Hello Node.js!

2秒后输出

异步执行:2秒后输出
二、核心模块:Node.js 内置功能
Node.js 提供丰富的内置模块,无需安装即可使用,以下是高频模块示例:

  1. 文件系统模块(fs):读写文件
    javascript
    运行
    // fs.js
    const fs = require("fs");
    const path = require("path"); // 路径处理模块

// 1. 同步读取文件(简单场景)
try {
const data = fs.readFileSync(path.join(__dirname, "test.txt"), "utf8");
console.log("同步读取文件:", data);
} catch (err) {
console.error("读取失败:", err.message);
}

// 2. 异步读取文件(推荐,非阻塞)
fs.readFile(path.join(__dirname, "test.txt"), "utf8", (err, data) => {
if (err) {
console.error("异步读取失败:", err.message);
return;
}
console.log("异步读取文件:", data);
});

// 3. 写入文件
const content = "Hello Node.js 写入内容!";
fs.writeFile(path.join(__dirname, "output.txt"), content, (err) => {
if (err) {
console.error("写入失败:", err.message);
return;
}
console.log("文件写入成功!");
});

// 4. 追加内容到文件
fs.appendFile(path.join(__dirname, "output.txt"), "\n追加的内容", (err) => {
if (err) throw err;
console.log("内容追加成功!");
});
运行前准备:创建 test.txt 文件,写入任意内容,执行 node fs.js 即可测试。

  1. HTTP 模块:创建简易 Web 服务器
    javascript
    运行
    // server.js
    const http = require("http");

// 创建服务器
const server = http.createServer((req, res) => {
// 设置响应头
res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });

// 路由处理
if (req.url === "/" && req.method === "GET") {
res.end("

欢迎访问 Node.js 服务器

路径:/

");
} else if (req.url === "/api/user" && req.method === "GET") {
// 返回JSON数据
res.writeHead(200, { "Content-Type": "application/json; charset=utf-8" });
res.end(JSON.stringify({
code: 200,
data: { name: "张三", age: 20 },
msg: "请求成功"
}));
} else {
res.writeHead(404);
res.end("

404 Not Found

");
}
});

// 监听端口
const PORT = 3000;
server.listen(PORT, () => {
console.log(服务器运行在:http://localhost:${PORT});
});
运行服务器:
bash
运行
node server.js
访问测试:
首页:http://localhost:3000
接口:http://localhost:3000/api/user

  1. 路径模块(path):处理文件路径
    javascript
    运行
    // path.js
    const path = require("path");

// 当前文件路径
console.log("当前文件路径:", filename);
// 当前目录路径
console.log("当前目录路径:",
dirname);

// 拼接路径(跨平台兼容)
const filePath = path.join(__dirname, "files", "test.txt");
console.log("拼接路径:", filePath);

// 解析路径
const parsedPath = path.parse(filePath);
console.log("解析路径:", parsedPath);
// 输出:{ root, dir, base, ext, name }

// 获取文件扩展名
console.log("文件扩展名:", path.extname(filePath)); // .txt

  1. 事件模块(events):自定义事件
    Node.js 基于事件驱动,events 模块是核心:
    javascript
    运行
    // events.js
    const EventEmitter = require("events");

// 自定义事件发射器
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();

// 监听事件
myEmitter.on("greet", (name) => {
console.log(你好,${name}!);
});

// 监听一次事件(仅触发一次)
myEmitter.once("onceEvent", () => {
console.log("该事件仅触发一次");
});

// 触发事件
myEmitter.emit("greet", "张三");
myEmitter.emit("onceEvent");
myEmitter.emit("onceEvent"); // 无输出(仅触发一次)

// 移除事件监听
const callback = (name) => console.log(移除前:${name});
myEmitter.on("removeTest", callback);
myEmitter.emit("removeTest", "李四");
myEmitter.off("removeTest", callback);
myEmitter.emit("removeTest", "李四"); // 无输出
三、NPM 包管理:Node.js 生态核心
NPM 是 Node.js 自带的包管理器,用于安装 / 管理第三方依赖,核心命令如下:

  1. 基础命令
    bash
    运行

    初始化项目(生成package.json)

    npm init -y # -y 跳过交互,直接生成

安装包

npm install axios # 本地安装(项目内)
npm install -g nodemon # 全局安装(系统级)
npm install express@4.18.2 # 指定版本安装

卸载包

npm uninstall axios

更新包

npm update axios

查看已安装包

npm list # 本地包
npm list -g --depth=0 # 全局包(仅显示顶层)

  1. 实战:使用 Express 搭建 Web 服务
    bash
    运行

    安装Express

    npm install express
    创建 express-server.js,复制以下代码:
    javascript
    运行
    // express-server.js
    const express = require("express");
    const app = express();
    const PORT = 3000;

// 中间件:解析JSON请求体
app.use(express.json());

// 路由:GET请求
app.get("/", (req, res) => {
res.send("

Express 服务器

");
});

// 路由:GET请求返回JSON
app.get("/api/user", (req, res) => {
res.json({
code: 200,
data: { name: "张三", age: 20 },
msg: "请求成功"
});
});

// 路由:POST请求
app.post("/api/login", (req, res) => {
const { username, password } = req.body;
if (username === "admin" && password === "123456") {
res.json({ code: 200, msg: "登录成功" });
} else {
res.json({ code: 400, msg: "账号或密码错误" });
}
});

// 启动服务器
app.listen(PORT, () => {
console.log(Express服务器运行在:http://localhost:${PORT});
});
运行服务器:
bash
运行
node express-server.js
测试接口:
GET:http://localhost:3000/api/user
POST:http://localhost:3000/api/login(请求体:{"username":"admin","password":"123456"})
四、实战示例:文件上传 + API 服务
bash
运行

安装依赖

npm install express multer cors
创建 app.js,复制以下代码:
javascript
运行
// app.js
const express = require("express");
const multer = require("multer");
const cors = require("cors");
const fs = require("fs");
const path = require("path");

const app = express();
const PORT = 3000;

// 跨域中间件
app.use(cors());
// 解析JSON
app.use(express.json());
// 静态文件目录(上传的文件可访问)
app.use("/uploads", express.static(path.join(__dirname, "uploads")));

// 创建uploads目录(不存在则创建)
if (!fs.existsSync(path.join(dirname, "uploads"))) {
fs.mkdirSync(path.join(
dirname, "uploads"));
}

// 配置文件上传
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, path.join(__dirname, "uploads"));
},
filename: (req, file, cb) => {
// 自定义文件名:时间戳+原文件名
const fileName = ${Date.now()}-${file.originalname};
cb(null, fileName);
}
});
const upload = multer({ storage });

// 1. 文件上传接口
app.post("/api/upload", upload.single("file"), (req, res) => {
if (!req.file) {
return res.json({ code: 400, msg: "请选择文件" });
}
// 返回文件访问路径
const fileUrl = http://localhost:${PORT}/uploads/${req.file.filename};
res.json({
code: 200,
msg: "上传成功",
data: {
fileName: req.file.filename,
fileSize: req.file.size,
fileUrl
}
});
});

// 2. 获取文件列表接口
app.get("/api/files", (req, res) => {
fs.readdir(path.join(__dirname, "uploads"), (err, files) => {
if (err) {
return res.json({ code: 500, msg: "获取文件列表失败" });
}
// 拼接文件访问路径
const fileList = files.map(file => ({
name: file,
url: http://localhost:${PORT}/uploads/${file}
}));
res.json({
code: 200,
data: fileList
});
});
});

// 启动服务器
app.listen(PORT, () => {
console.log(应用运行在:http://localhost:${PORT});
console.log("文件上传接口:POST /api/upload");
console.log("文件列表接口:GET /api/files");
});
运行与测试
启动应用:node app.js;
测试文件上传(Postman):
请求方式:POST;
地址:http://localhost:3000/api/upload;
请求体:form-data,key 为file,选择任意文件上传;
查看文件列表:访问 http://localhost:3000/api/files。
五、核心特性与避坑指南

  1. 核心特性
    异步非阻塞 I/O:文件读写、网络请求等操作不阻塞主线程,适合高并发场景;
    单线程:主线程处理逻辑,异步操作由 Libuv 线程池处理,避免线程切换开销;
    事件驱动:基于事件循环(Event Loop),异步操作完成后触发回调;
    跨平台:支持 Windows/Mac/Linux,代码一次编写多端运行;
    丰富的生态:NPM 拥有百万 + 第三方包,覆盖各类场景。
  2. 常见坑点
    (1)回调地狱
    多层异步回调嵌套导致代码难以维护,优化方案:
    javascript
    运行
    // 原始回调(不推荐)
    fs.readFile("1.txt", (err, data1) => {
    fs.readFile("2.txt", (err, data2) => {
    fs.readFile("3.txt", (err, data3) => {
    // 多层嵌套
    });
    });
    });

// 优化:Promise + async/await(推荐)
const readFile = (path) => {
return new Promise((resolve, reject) => {
fs.readFile(path, "utf8", (err, data) => {
err ? reject(err) : resolve(data);
});
});
};

const readFiles = async () => {
try {
const data1 = await readFile("1.txt");
const data2 = await readFile("2.txt");
console.log(data1, data2);
} catch (err) {
console.error(err);
}
};
(2)同步操作慎用
fs.readFileSync 等同步方法会阻塞主线程,仅适合启动时初始化。
(3)端口占用
启动服务器提示 EADDRINUSE 时,解决方法:
bash
运行

Windows

netstat -ano | findstr :3000 # 查找进程ID
taskkill /PID 进程ID /F # 杀死进程

Linux/Mac

lsof -i :3000 # 查找进程ID
kill -9 进程ID # 杀死进程

  1. 生产环境优化
    使用 pm2 管理进程(自动重启、负载均衡):
    bash
    运行
    npm install -g pm2
    pm2 start app.js --name "node-app"
    pm2 list # 查看进程
    pm2 restart node-app # 重启
    pm2 logs # 查看日志
    配置环境变量区分开发 / 生产环境;
    全局捕获异常,避免服务崩溃;
    使用 winston/log4js 记录日志。
    总结
    Node.js 凭借异步非阻塞特性和丰富的生态,成为全栈开发的核心技术。掌握其内置模块、NPM 包管理和异步编程模式,可轻松构建高性能的后端服务、CLI 工具和全栈应用。
相关文章
|
4月前
|
人工智能 机器人 Linux
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI智能体,支持飞书等多平台对接。本教程手把手教你Linux下部署,实现数据私有、系统控制、网页浏览与代码编写,全程保姆级操作,240字内搞定专属AI助手搭建!
10464 24
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手
|
4月前
|
人工智能 自然语言处理 PyTorch
构建AI智能体:九十四、Hugging Face 与 Transformers 完全指南:解锁现代 NLP 的强大力量
Hugging Face 是领先的自然语言处理开源平台,提供 Transformers 等核心库,支持数千种预训练模型,涵盖文本分类、生成、问答等任务。其 Pipeline 工具简化了模型调用,AutoClass 实现架构自动识别,助力开发者高效构建 AI 应用。
1045 10
|
4月前
|
弹性计算 人工智能 数据库
阿里云节省计划是什么?新手上云指南,教你如何更省钱!
阿里云节省计划是承诺消费享高折扣的计费方案,最高省65%。相比包年包月更灵活,不绑实例,自动抵扣,适合业务波动的用户。新手三步开通,叠加新客优惠更划算,一年可省千元。
637 3
|
7月前
|
IDE Java 关系型数据库
如何利用Spring Initializr快速搭建项目
通过Spring Initializr可快速搭建Spring Boot项目。访问官网,配置项目信息,选择依赖(如Web、MyBatis、MySQL等),生成并下载项目压缩包,解压后导入IDE,自动构建完成,快速高效地初始化标准项目结构,提升开发效率。(238字)
772 3
|
编解码 算法 开发者
新手主播实战教程:YY开播工具+OBS美颜插件配置,零基础实现专业级直播画质
本文面向对直播画质有高要求的开发者与专业主播,详解如何通过YY开播工具的虚拟摄像头功能,将其美颜能力无缝集成至OBS推流软件,弥补OBS原生美颜功能的不足。内容涵盖软硬件准备、核心对接步骤及YY美颜参数调优技巧,帮助用户实现专业级直播视觉效果,同时提供常见问题解答,确保配置顺利。
新手主播实战教程:YY开播工具+OBS美颜插件配置,零基础实现专业级直播画质
|
Web App开发 JavaScript 前端开发
nodejs入门,这一篇就够了
nodejs入门,这一篇就够了
2143 0
nodejs入门,这一篇就够了
|
人工智能 自然语言处理 Java
IDEA中使用DeepSeek满血版的手把手教程来了!
本文主要介绍阿里云推出的AI编码助手——通义灵码在代码编写、智能问答、bug修复等方面的功能。
IDEA中使用DeepSeek满血版的手把手教程来了!
|
Web App开发 JavaScript 前端开发
2024年5月node.js安装(winmac系统)保姆级教程
本篇博客为2024年5月版Node.js安装教程,适用于Windows和Mac系统。作者是一名熟悉JavaScript与Vue的大一学生,分享了Node.js的基本介绍、下载链接及简单安装步骤。安装完成后,通过终端命令`node -v`验证版本即可确认安装成功。欢迎关注作者,获取更多技术文章。
982 2
2024年5月node.js安装(winmac系统)保姆级教程
|
SQL 数据挖掘 大数据
如何在 SQL Server 中使用 `SELECT TOP`
【8月更文挑战第10天】
1011 7
如何在 SQL Server 中使用 `SELECT TOP`