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…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...