Node.js 完全教程:从入门到精通
Node.js 完全教程:从入门到精通
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,允许开发者在服务器端使用 JavaScript。它的非阻塞 I/O 和事件驱动架构使得 Node.js 非常适合于构建高性能的网络应用。本文将详细介绍 Node.js 的安装、基本语法、模块系统、异步编程、Express 框架、数据库操作等内容,帮助你从入门到精通 Node.js。

1. Node.js 简介
Node.js 是一个开源的、跨平台的 JavaScript 运行时环境,能够在服务器端执行 JavaScript 代码。它的特点包括:
- 异步非阻塞:Node.js 使用事件驱动的非阻塞 I/O 模型,使得它能够处理大量并发请求。
- 单线程:Node.js 运行在单线程上,但通过事件循环机制实现并发处理。
- 高性能:得益于 V8 引擎,Node.js 执行 JavaScript 代码的速度非常快。
2. Node.js 安装
2.1 下载与安装
前往 Node.js 官方网站 下载适合你操作系统的安装包。安装过程非常简单,按照提示完成安装即可。
2.2 验证安装
打开终端(Windows 用户可以使用命令提示符),输入以下命令检查 Node.js 和 npm(Node.js 包管理器)的版本:
node -v
npm -v
如果安装成功,你将看到版本号输出。

3. Node.js 基本语法
3.1 Hello World 示例
创建一个新的 JavaScript 文件 app.js,并输入以下代码:
console.log("Hello, World!");
在终端中运行:
node app.js
输出结果:
Hello, World!
3.2 变量与数据类型
Node.js 支持 JavaScript 的所有基本数据类型,包括:
- 字符串:
let name = "Node.js"; - 数字:
let age = 25; - 布尔值:
let isNode = true; - 数组:
let fruits = ["apple", "banana", "orange"]; - 对象:
let person = { name: "Alice", age: 30 };
3.3 控制结构
Node.js 支持常见的控制结构,如条件语句和循环。
3.3.1 条件语句
let age = 18;
if (age >= 18) {console.log("成年人");
} else {console.log("未成年人");
}
3.3.2 循环
for (let i = 0; i < 5; i++) {console.log(i);
}
4. 模块系统
Node.js 的模块化设计使得代码更易于维护和复用。使用 require 导入模块,使用 module.exports 导出模块。
4.1 创建模块
创建一个名为 math.js 的文件,内容如下:
function add(a, b) {return a + b;
}function subtract(a, b) {return a - b;
}module.exports = {add,subtract
};
4.2 使用模块
在 app.js 中使用刚刚创建的模块:
const math = require('./math');console.log(math.add(5, 3)); // 输出 8
console.log(math.subtract(5, 3)); // 输出 2
5. 异步编程
Node.js 的异步编程模型是其核心特性之一。通过回调函数、Promise 和 async/await 来处理异步操作。
5.1 回调函数
const fs = require('fs');fs.readFile('example.txt', 'utf8', (err, data) => {if (err) {console.error(err);return;}console.log(data);
});
5.2 Promise
const fs = require('fs').promises;fs.readFile('example.txt', 'utf8').then(data => {console.log(data);}).catch(err => {console.error(err);});
5.3 async/await
const fs = require('fs').promises;async function readFile() {try {const data = await fs.readFile('example.txt', 'utf8');console.log(data);} catch (err) {console.error(err);}
}readFile();
6. 创建 Web 服务器
Node.js 可以轻松创建 HTTP 服务器。以下是一个简单的服务器示例:
const http = require('http');const server = http.createServer((req, res) => {res.statusCode = 200;res.setHeader('Content-Type', 'text/plain');res.end('Hello, Node.js!
');
});server.listen(3000, () => {console.log('服务器运行在 http://localhost:3000/');
});
在终端中运行该文件后,打开浏览器访问 http://localhost:3000/,你将看到 “Hello, Node.js!” 的输出。

7. 使用 Express 框架
Express 是 Node.js 最流行的 Web 应用框架之一,简化了服务器的创建和路由管理。
7.1 安装 Express
使用 npm 安装 Express:
npm install express
7.2 创建一个简单的 Express 应用
const express = require('express');
const app = express();app.get('/', (req, res) => {res.send('Hello, Express!');
});app.listen(3000, () => {console.log('Express 服务器运行在 http://localhost:3000/');
});
7.3 路由管理
app.get('/about', (req, res) => {res.send('关于页面');
});app.get('/contact', (req, res) => {res.send('联系页面');
});
8. 数据库操作
Node.js 可以与多种数据库进行交互,包括 MongoDB、MySQL、PostgreSQL 等。以下是使用 MongoDB 的示例。
8.1 安装 MongoDB 驱动
npm install mongodb
8.2 连接 MongoDB
const { MongoClient } = require('mongodb');async function main() {const uri = "mongodb://localhost:27017";const client = new MongoClient(uri);try {await client.connect();console.log("成功连接到 MongoDB");} catch (err) {console.error(err);} finally {await client.close();}
}main().catch(console.error);
8.3 CRUD 操作
async function createDocument(client, newDocument) {const result = await client.db("test").collection("users").insertOne(newDocument);console.log(`新文档创建成功:${result.insertedId}`);
}
9. 错误处理
在 Node.js 中,错误处理是非常重要的。可以使用 try...catch 语句处理同步代码中的错误,对于异步代码,可以在 Promise 中使用 .catch() 方法。
async function riskyOperation() {try {// 可能抛出错误的操作} catch (error) {console.error("发生错误:", error);}
}
10. 中间件
在 Express 中,中间件是处理请求和响应的函数。可以用于日志记录、请求解析、身份验证等。
10.1 创建中间件
app.use((req, res, next) => {console.log(`${req.method} ${req.url}`);next(); // 调用下一个中间件
});
10.2 使用现成的中间件
可以使用 body-parser 中间件解析请求体:
npm install body-parserconst bodyParser = require('body-parser');app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
11. 部署 Node.js 应用
将 Node.js 应用部署到云服务器(如 AWS、Heroku、DigitalOcean 等)是一个重要的步骤。以下是基本的部署步骤:
- 选择云服务提供商:选择适合的云服务提供商并创建账户。
- 配置服务器:根据提供商的文档配置服务器环境。
- 上传代码:使用 Git 或 FTP 将代码上传到服务器。
- 安装依赖:在服务器上运行
npm install安装依赖。 - 启动应用:使用
node app.js启动应用,或者使用 PM2 等进程管理工具保持应用运行。

12. 总结
本文详细介绍了 Node.js 的基础知识、模块系统、异步编程、Web 服务器创建、Express 框架、数据库操作等内容。通过示例代码和图示,帮助你更好地理解和掌握 Node.js 的使用。希望这份教程能对你学习 Node.js 有所帮助,祝你在开发中取得成功!
如果你有任何问题或建议,欢迎在评论区留言。感谢你的阅读!
相关文章:
Node.js 完全教程:从入门到精通
Node.js 完全教程:从入门到精通 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,允许开发者在服务器端使用 JavaScript。它的非阻塞 I/O 和事件驱动架构使得 Node.js 非常适合于构建高性能的网络应用。本文将详细介绍 Node.js 的安装、基本语…...
elasticsearch 数据导出/导入
例子: 导出命令: elasticdump --inputhttps://elastic:elasticsearchlocalhost:9100/company --outputcompany.json --typedata --no-verify 注意,本地docker搭建,禁用自签证书验证,先设置环境变量 export NODE_TL…...
什么是三高架构?
大家好,我是锋哥。今天分享关于【什么是三高架构?】面试题。希望对大家有帮助; 什么是三高架构? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 “三高架构”通常是指高可用性(High Availability)、高性能ÿ…...
Docker 单机快速部署大数据各组件
文章目录 一、Spark1.1 NetWork 网络1.2 安装 Java81.3 安装 Python 环境1.4 Spark 安装部署 二、Kafka三、StarRocks四、Redis五、Rabbitmq六、Emqx6.1 前言6.2 安装部署 七、Flink八、Nacos九、Nginx 一、Spark 1.1 NetWork 网络 docker network lsdocker network create -…...
CSS笔记基础篇01——选择器、文字控制属性、背景属性、显示模式、盒子模型
黑马程序员视频地址: 前端Web开发HTML5CSS3移动web视频教程https://www.bilibili.com/video/BV1kM4y127Li?vd_source0a2d366696f87e241adc64419bf12cab&spm_id_from333.788.videopod.episodeshttps://www.bilibili.com/video/BV1kM4y127Li?vd_source0a2d3666…...
pytest全局配置文件pytest.ini
pytest.ini 改变 pytest 的默认行为,一般放在项目的根目录,不能包含中文符号。不管是主函数模式运行,命令行模式运行,都会去读取这个全局配置文件。 [pytest] ;配置命令行参数,用空格进行分隔。addopts 中的选项会被命…...
PyTest自学-认识PyTest
1 PyTest自学-认识PyTest 1.1 PyTest可以用来做什么? PyTest是一个自动化测试框架,支持单元测试和功能测试,有丰富的插件,如,pytest-selemium, pytest-html等。 1.2 安装pytest 使用pip install -U pytest。 1.3 py…...
【专题】为2025制定可付诸实践的IT战略规划报告汇总PDF洞察(附原数据表)
原文链接:https://tecdat.cn/?p39055 在当今瞬息万变的商业环境中,制定有效的 IT 战略规划对于企业的成功与可持续发展至关重要。本报告深入探讨了制定 IT 战略规划的关键活动,旨在为企业和决策者提供全面且实用的指导。 Gartner的《为202…...
自旋锁与CAS
上文我们认识了许许多多的锁,此篇我们的CAS就是从上文的锁策略开展的新概念,我们来一探究竟吧 1. 什么是CAS? CAS: 全称Compare and swap,字⾯意思:“比较并交换”,⼀个CAS涉及到以下操作: 我们假设内存中…...
数组-二分查找
目录 算法思想: 实践: 备注: 二分查找是一种高效的查找算法,适用于在 有序数组 或列表中快速定位目标元素的索引。 重要事情说三遍:使用前提:数组有序,无重复,如果数组未排序&am…...
如何使用 Python 进行文件读写操作?
大家好,我是 V 哥。今天的内容来介绍 Python 中进行文件读写操作的方法,这在学习 Python 时是必不可少的技术点,希望可以帮助到正在学习 python的小伙伴。 以下是 Python 中进行文件读写操作的基本方法: 一、文件读取࿱…...
springcloud中的Feign调用
目录 一、基础应用 1.feign使用 1.增加feign依赖 2.编写feign接口 3.启用feign 4.调试 5.可能出现的异常信息 1.404 可能原因: 2.503 可有原因: 2.feign自定义配置 1.创建Feign配置类 2.feign接口 3.调试结果 3.feign多参数请求 Feign是Netflix开发的声明…...
【部署】将项目部署到云服务器
目录 1.获得服务器 2.连接到云服务器 3.配置环境 3.1.Java(运行后端所需) 3.2.MySQL数据库 3.3.Nginx(运行前端所需) 3.4. Node.js(构建前端所需) 4.打包项目 4.1.打包后端项目 4.2.打包前端项目…...
2024年AI大模型技术年度总结与应用实战:创新与突破并进
前言 回顾2024年,我一共发布了286篇博文,粉丝数也达到了43000多。这一年里,我收获颇丰,始终坚持AI大模型的研究方向,并且积极开展大模型的实战应用,也取得了一系列令人振奋的突破。 在286篇博文中&#…...
docker离线安装及部署各类中间件(x86系统架构)
前言:此文主要针对需要在x86内网服务器搭建系统的情况 一、docker离线安装 1、下载docker镜像 https://download.docker.com/linux/static/stable/x86_64/ 版本:docker-23.0.6.tgz 2、将docker-23.0.6.tgz 文件上传到服务器上面,这里放在…...
SuperdEye:一款基于纯Go实现的间接系统调用执行工具
关于SuperdEye SuperdEye是一款基于纯Go实现的间接系统调用执行工具,该工具是TartarusGate 的修订版,可以利用Go来实现TartarusGate 方法进行间接系统调用。 该工具的目标是为了扫描挂钩的NTDLL并检索Syscall编号,然后使用它来执行间接系统调…...
PCL 新增自定义点类型【2025最新版】
目录 一、自定义点类型1、前言2、定义方法3、代码示例二、合并现有类型三、点云按时间渲染1、CloudCompare渲染2、PCL渲染博客长期更新,本文最近更新时间为:2025年1月18日。 一、自定义点类型 1、前言 PCL库自身定义了很多点云类型,但是在使用的时候时如果要使用自己定义的…...
Docker导入镜像
使用命令行进行处理: docker load < onething1_wxedge.tar如下图所示 查看状态 docker images...
PyTorch使用教程(9)-使用profiler进行模型性能分析
1、简介 PyTorch Profiler是一个内置的性能分析工具,可以帮助开发者定位计算资源(如CPU、GPU)的瓶颈,从而更好地优化PyTorch程序。通过捕获和分析GPU的计算、内存和带宽利用情况,能够有效识别并解决性能瓶颈。 2、原…...
SpringBoot中使用MyBatis-Plus详细介绍
目录 一、MyBatis-Plus的使用步骤 1.引入MybatisPlus的起步依赖 2.定义Mapper(也叫dao)层的接口 3.MyBatis-Plus中常用注解 4. 使用MyBatis-Plus时要做如下配置 5.条件构造器 Wrapper 一、MyBatis-Plus的使用步骤 1.引入MybatisPlus的起步依赖 M…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
高防服务器价格高原因分析
高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...
如何通过git命令查看项目连接的仓库地址?
要通过 Git 命令查看项目连接的仓库地址,您可以使用以下几种方法: 1. 查看所有远程仓库地址 使用 git remote -v 命令,它会显示项目中配置的所有远程仓库及其对应的 URL: git remote -v输出示例: origin https://…...
k8s从入门到放弃之Pod的容器探针检测
k8s从入门到放弃之Pod的容器探针检测 在Kubernetes(简称K8s)中,容器探测是指kubelet对容器执行定期诊断的过程,以确保容器中的应用程序处于预期的状态。这些探测是保障应用健康和高可用性的重要机制。Kubernetes提供了两种种类型…...
深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀”
深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀” 在JavaScript中,我们经常需要处理文本、数组、对象等数据类型。但当我们需要处理文件上传、图像处理、网络通信等场景时,单纯依赖字符串或数组就显得力不从心了。这时ÿ…...
