Node.js 完全教程:从入门到精通

news2025/2/24 18:07:28

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-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 有所帮助,祝你在开发中取得成功!

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【经验分享】ARM Linux-RT内核实时系统性能评估工具

【经验分享】ARM Linux-RT内核实时系统性能评估工具 前言下载和编译方法常用工具介绍总结 前言 最近在研究Linux-RT实时系统&#xff0c;介绍下常用的实时系统的性能评估工具。 下载和编译方法 用git下载 git clone git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.…

C++ ——— 模拟实现 vector 类

目录 vector 类的框架 无参数的构造函数 析构函数 获取有效数据个数 获取容量 重载 [] 运算符 可读可写版本 只可读版本 扩容 尾插 实现迭代器 可读可写版本 只可读版本 自定义设置size长度和内容 在任意位置插入 删除任意位置的数据 赋值重载 vector 类的框…

02内存结构篇(D4_JVM内存分配机制)

目录 一、对象的创建 1. 类加载检查 2. 分配内存 3. 初始化零值 4. 设置对象头 32位对象头 64位对象头 5. 执行方法 二、对象大小与指针压缩 三、对象内存分配 1. 对象内存分配流程图 2. 对象栈上分配 3.3 对象在Eden区分配 3.4 大对象直接进入老年代 3.5 长期存…

异步 进程 Promise规范及应用

异步 两个或多个事件不同时存在或发生&#xff0c;区别于同步&#xff0c;同步是顺序执行从上到下&#xff0c;而异步不需要顺序执行&#xff0c;且不依赖于前面的事情是否已完成。 举例&#xff1a; //异步执行 let count 1; let timer setTimeout(function () {count…

C#树图显示目录下所有文件以及文件大小

C#树图显示目录下所有文件以及文件大小 我们在打开某个目录属性时,可以查看到有大小信息.如下图 而一个目录(文件夹)System.IO.Directory是没有FileSize或者Length属性的. 目录(文件夹)的大小是指该目录下所有子目录和所有文件大小的累加,按字节为单位. 新建窗体应用程序Get…

力扣707题——设计链表

#题目 从零开始设计链表&#xff0c;我们拆分成两次任务&#xff0c;今天先看1 ,2 ,4 #代码

机器学习09-Pytorch功能拆解

机器学习09-Pytorch功能拆解 我个人是Java程序员&#xff0c;关于Python代码的使用过程中的相关代码事项&#xff0c;在此进行记录 文章目录 机器学习09-Pytorch功能拆解1-核心逻辑脉络2-个人备注3-Pytorch软件包拆解1-Python有参和无参构造构造方法的基本语法示例解释注意事项…

天津市开通首个万兆宽带:1秒钟下载1GB文件

快科技1月21日消息&#xff0c;华为光网宣布&#xff0c;天津联通携手华为&#xff0c;日前成功为天津市北辰区柴楼金园小区部署了天津市首个万兆宽带网络。 在现场测速环节中&#xff0c;该万兆宽带网络展现出了惊人的速度——高达9429Mbps的下载速率&#xff0c;几乎跑满带宽…

html全局遮罩,通过websocket来实现实时发布公告

1.index.html代码示例 <div id"websocket" style"display:none;position: absolute;color:red;background-color: black;width: 100%;height: 100%;z-index: 100; opacity: 0.9; padding-top: 30%;padding-left: 30%; padding-border:1px; "onclick&q…

数据结构(四) B树/跳表

目录 1. LRU 2. B树 3. 跳表 1. LRU: 1.1 概念: 最近最少使用算法, 就是cache缓存的算法. 因为cache(位于内存和cpu之间的存储设备)是一种容量有限的缓存, 有新的数据进入就需要将原本的数据进行排出. 1.2 LRU cache实现: #include <iostream> #include <list>…

Spring Boot 整合 ShedLock 处理定时任务重复执行的问题

&#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Micro麦可乐的博客 &#x1f425;《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程&#xff0c;入门到实战 &#x1f33a;《RabbitMQ》…

CSDN年度回顾:技术征途上的坚实步伐

嘿&#xff0c;时光过得可真快呀&#xff0c;就像那匹跑得飞快的白马&#xff0c;嗖的一下&#xff0c;2024 年的日历就这么悄无声息地翻到了最后一页。这会儿我回头看看在 CSDN 上度过的这一年&#xff0c;心里那叫一个感慨万千&#xff0c;满满的都是喜悦&#xff0c;就像心里…

解决 PostgreSQL 中创建 TimescaleDB 扩展的字符串错误

解决 PostgreSQL 中创建 TimescaleDB 扩展的字符串错误 在使用 PostgreSQL 数据库并尝试创建 TimescaleDB 扩展时&#xff0c;你可能会遇到一些棘手的错误。今天&#xff0c;我们就来探讨一个常见的错误信息及相应的解决方法&#xff1a; CREATE EXTENSION IF NOT EXISTS tim…

【语言处理和机器学习】概述篇(基础小白入门篇)

前言 自学笔记&#xff0c;分享给语言学/语言教育学方向的&#xff0c;但对语言数据处理感兴趣但是尚未入门&#xff0c;却需要在论文中用到的小伙伴&#xff0c;欢迎大佬们补充或绕道。ps&#xff1a;本文不涉及公式讲解&#xff08;文科生小白友好体质&#xff09;&#xff…

【ESP32】ESP32连接JY61P并通过WIFI发送给电脑

前言 手头上有个ESP32&#xff0c;发现有wifi功能&#xff0c;希望连接JY61P并通过WIFI把姿态数据发送给电脑 1.采用Arduino IDE编译器&#xff1b;需要安装ESP32的开发板管理器&#xff1b; 2.电脑接受数据是基于python的&#xff1b; 1. ESP32 连接手机WIFI #include <…

将 Docker 安装到 Windows 的 D 盘的方法

1.官网下载Docker Desktop Installer.exe&#xff0c;官网网址&#xff1a;Get Started | Docker 2.以管理员身份打开 Windows 终端 3.切换到 你Docker Desktop Installer.exe下载到的地址 4.在运行代码前&#xff0c;需要提前手动创建好D:\Program Files\Docker和D:\Program F…

DeepSeek-R1-GRPO理解

一、GRPO GRPO&#xff08;Group Relative Policy Optimization&#xff09;是一种强化学习&#xff08;Reinforcement Learning, RL&#xff09;算法&#xff0c;专门用于训练大型语言模型&#xff08;LLMs&#xff09;在复杂任务&#xff08;如数学推理、代码生成等&#xf…

Unreal Engine 5 C++ Advanced Action RPG 十章笔记

第十章 Survival Game Mode 2-Game Mode Test Map 设置游戏规则进行游戏玩法 生成敌人玩家是否死亡敌人死亡是否需要刷出更多 肯定:难度增加否定:玩家胜利 流程 新的游戏模式类游戏状态新的数据表来指定总共有多少波敌人生成逻辑UI告诉当前玩家的敌人波数 3-Survival Game M…

接口(1)

大家好&#xff0c;今天我们来看看接口的概念&#xff0c;接口跟类的使用是有一些区别的&#xff0c;接口中都是抽象方法&#xff0c;简单介绍一下后&#xff0c;我们正式来学习。 2、接口 接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用. 在java中,…

docker离线安装及部署各类中间件(x86系统架构)

前言&#xff1a;此文主要针对需要在x86内网服务器搭建系统的情况 一、docker离线安装 1、下载docker镜像 https://download.docker.com/linux/static/stable/x86_64/ 版本&#xff1a;docker-23.0.6.tgz 2、将docker-23.0.6.tgz 文件上传到服务器上面&#xff0c;这里放在…