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!\n');
});

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-parser
const bodyParser = require('body-parser');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

11. 部署 Node.js 应用

将 Node.js 应用部署到云服务器(如 AWS、Heroku、DigitalOcean 等)是一个重要的步骤。以下是基本的部署步骤:

  1. 选择云服务提供商:选择适合的云服务提供商并创建账户。
  2. 配置服务器:根据提供商的文档配置服务器环境。
  3. 上传代码:使用 Git 或 FTP 将代码上传到服务器。
  4. 安装依赖:在服务器上运行 npm install 安装依赖。
  5. 启动应用:使用 node app.js 启动应用,或者使用 PM2 等进程管理工具保持应用运行。

在这里插入图片描述

12. 总结

本文详细介绍了 Node.js 的基础知识、模块系统、异步编程、Web 服务器创建、Express 框架、数据库操作等内容。通过示例代码和图示,帮助你更好地理解和掌握 Node.js 的使用。希望这份教程能对你学习 Node.js 有所帮助,祝你在开发中取得成功!

如果你有任何问题或建议,欢迎在评论区留言。感谢你的阅读!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/908883.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++STL——list

C教学总目录 list 1、list简介2、构造函数3、迭代器4、访问和容量函数5、修改类函数6、操作类函数 1、list简介 list是带头双向循环链表&#xff0c;也是模板类&#xff0c;使用时要指明类型&#xff0c;包含于头文件<list> 由于list是双向循环链表&#xff0c;在任意位置…

大数据计算里的-Runtime Filter

文章目录 Runtime Filter示例 Runtime Filter 从纸面意义来看&#xff0c;就是程序在运行时&#xff0c;根据实际的数据去进行一些过滤操作。这和静态的规则优化不同&#xff0c;静态优化不考虑实现的数据的分布。 示例 select a.* ,b.* a join b on a.idb.id假设一下数据…

SD教程 ControlNet 之MLSD 室内设计

你是否已经厌倦了传统的室内设计方式&#xff0c;想探索新方法来增强作品设计感&#xff1f;本期小编就同大家分享一个新武器&#xff0c;用Stable Diffusion的ControlNet来打造一个室内设计全新工作流。无论你是经验丰富的室内设计师还是初学小白&#xff0c;都将使你的日常工…

蓬勃发展:移动开发——关于软件开发你需要知道些什么

一、前言 移动开发一直都是软件开发领域中最有趣的领域之一&#xff0c;这是因为&#xff1a; 1、移动开发为“只有一个人”的开发团队提供了一个非常独特的机会&#xff0c;让他可以在相对较短的时间内建立一个实际的、可用的、有意义的应用程序&#xff1b; 2、移动开发也代…

性能测试 —— MySQL性能测试方案设计!

01、慢查询 查看是否开启慢查询 mysql> show variables like %slow%’; 如图所示&#xff1a; 系统变量log_slow_admin_statements 表示是否将慢管理语句例如ANALYZE TABLE和ALTER TABLE等记入慢查询日志 启用log_slow_extra系统变量 &#xff08;从MySQL 8.0.14开始提…

每日OJ题_牛客_爱吃素_数学_C++_Java

目录 牛客_爱吃素_数学 题目解析 C代码 Java代码 牛客_爱吃素_数学 爱吃素 (nowcoder.com) 描述&#xff1a; 牛妹是一个爱吃素的小女孩&#xff0c;所以很多素数都害怕被她吃掉。 一天&#xff0c;两个数字aaa和bbb为了防止被吃掉&#xff0c;决定和彼此相乘在一…

Vue 自定义icon组件封装SVG图标

通过自定义子组件CustomIcon.vue使用SVG图标&#xff0c;相比iconfont下载文件、重新替换更节省时间。 子组件包括&#xff1a; 1. Icons.vue 存放所有SVG图标的path 2. CustomIcon.vue 通过icon的id索引对应的图标 使用的时候需要将 <Icons></Icons> 引到使用的…

MySQL-如果你在添加外键时忘加约束名,如何找到系统默认的约束名

问题 在你添加约束的时候&#xff0c;一般都会为其取名以方便后期的修改&#xff0c;但是如果你忘记了呢&#xff0c;如何找到系统默认的约束名 解决方法 -- 查找约束名 SELECTCONSTRAINT_NAME FROMINFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERETABLE_NAME emp ANDREFERENCED_T…

KP8530X系列KP85301SGA 650V耐压 集成自举二极管的半桥栅极驱动器 北欧双线灯调色解决方案

KP8530X同系列选型参考&#xff1a; KP85301SGA兼容IR2103 KP85302SGA兼容IR2106、IR2001、IR2005、IR2186 KP85303SGA兼容IR2104 KP85304SGA兼容IR2304 KP85305SGA兼容IR21857 KP8530X系列KP85301SGA是一款 650V 耐压&#xff0c;集成自举二极管的半桥栅极驱…

IPC-A-610J-中文版 CHINESE-中文版 2024 电子组件的可接受性

IPC-A-610J-中文版 CHINESE-中文版 2024 电子组件的可接受性.pdf 链接: https://pan.baidu.com/s/1UreAzlB_P7tGH_WoFL2Ybg?pwd1234 提取码: 1234 https://share.weiyun.com/eQCyAPYh 通过网盘分享的文件&#xff1a;IPC-A-610J-中文版 CHINESE-中文版 2024 电子组件的可接受性…

JAVA设计模式之【建造者模式】

1 定义 建造者模式&#xff08;Builder Pattern&#xff09;使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 2 类图 产品类&#xff08;Product&#xff09;&#xff1a;表示被创建的复杂…

SQL server 列转行

在 SQL Server 中&#xff0c;将列转换为行的操作通常被称为“透视”&#xff08;Pivot&#xff09;的逆操作&#xff0c;即“反透视”&#xff08;Unpivot&#xff09;。SQL Server 提供了 UNPIVOT 关键字来实现这一功能。假设你有一个表 EmployeeDetails&#xff0c;其中包含…

分类算法——决策树 详解

决策树的底层原理 决策树是一种常用的分类和回归算法&#xff0c;其基本原理是通过一系列的简单决策&#xff0c;将数据集划分为多个子集&#xff0c;从而实现分类。决策树的核心思想是通过树形结构表示决策过程&#xff0c;节点代表特征&#xff0c;边代表决策&#xff0c;叶子…

【小白学机器学习31】 大数定律,中心极限定理,标准正态分布与概率的使用

目录 1 正态分布相关的2个相关定理 1.1 大数定律&#xff1a;(证明了)分布的稳定性 1.2 中心极限定理&#xff1a;(证明了)分布的收敛性 2 使用标准差和概率的2种思路 2.1 标准正态分布的曲线 2.2 两种使用方式 2.3 第1种&#xff1a;按整数倍标准差δ 作为标准使用 2.…

Sourcetree 启动问题(完美解决)

概述 sourcetree 之所以打开就闪退&#xff0c;是因为没有关闭 sourcetree 关机或者系统自动更新等没有关闭sourcetree就直接关机的行为导致缓存信息不匹配&#xff0c;删除的目的是为了重新加载缓存。 下方直接上图&#xff0c;按顺序操作&#xff1a; 1.找到 sourceTree 安…

Sigrity Power SI VR noise Metrics check模式如何进行电源噪声耦合分析操作指导

SSigrity Power SI VR noise Metrics check模式如何进行电源噪声耦合分析操作指导 Sigrity Power SI的VR noise Metrics check模式本质上是用来评估和观测器件的电源网络的耦合对于信号的影响,输出S参数以及列出具体的贡献值。 以下图为例

安科瑞Acrel-2000ES储能柜能量管理系统的详细介绍-安科瑞 蒋静

Acrel-2000ES储能柜能量管理系统具备全面的储能监控和管理功能。它包括了储能系统设备&#xff08;如PCS、BMS、电表、消防、空调等&#xff09;的详细信息&#xff0c;并实现了数据采集、处理、存储、数据查询与分析、可视化监控、报警管理和统计报表等功能。此外&#xff0c;…

细腻的链接:C++ list 之美的解读

细腻的链接&#xff1a;C list 之美的解读 前言&#xff1a; 小编在前几日刚写过关于vector容器的内容&#xff0c;现在小编list容器也学了一大部分了&#xff0c;小编先提前说一下学这部分的感悟&#xff0c;这个部分是我学C以来第一次感到有难度的地方&#xff0c;特别是在…

百度集度嵌入式面试题及参考答案

linux 系统之间通信机制有哪些&#xff1f; Linux 系统之间存在多种通信机制&#xff0c;以下是一些常见的通信机制及其详细介绍。 管道&#xff08;Pipe&#xff09; 原理&#xff1a;管道是一种半双工的通信方式&#xff0c;数据只能单向流动。它基于文件描述符&#xff0c;在…

使用vite+react+ts+Ant Design开发后台管理项目(五)

前言 本文将引导开发者从零基础开始&#xff0c;运用vite、react、react-router、react-redux、Ant Design、less、tailwindcss、axios等前沿技术栈&#xff0c;构建一个高效、响应式的后台管理系统。通过详细的步骤和实践指导&#xff0c;文章旨在为开发者揭示如何利用这些技术…