一盏茶的时间,入门 Node.js
一、.什么是 Node.js?
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时,用于构建高性能、可伸缩的网络应用。 它采用事件驱动、非阻塞 I/O 模型,使其在处理并发请求时表现出色。
二、安装 Node.js
首先,让我们从 Node.js 官网 下载并安装最新版本的 Node.js。安装完成后,你可以通过以下命令验证安装是否成功:
node -v
三、第一个 Node.js 程序
创建一个简单的 Node.js 程序,输出 "Hello, Node.js!":
// hello.js
console.log("Hello, Node.js!");
在集成终端中运行:
node hello.js
我们可以看到输出 "Hello, Node.js!"。
四、模块系统
当我们使用Node.js时,模块系统是其中一个核心特性,它允许我们将代码分割成可维护和可重用的模块。以下是关于Node.js模块系统的详细讲解:
1.什么是模块?
在Node.js中,我们可以将一个文件视为一个模块。每个模块都有自己的作用域,其中的变量、函数和类等内容默认是私有的。通过使用module.exports对象,模块可以向外部公开一些内容。
2.导入模块
要在一个模块中使用另一个模块,我们可以使用require函数。例如:
// 导入模块
const math = require('./math');// 使用模块中的功能
console.log(math.add(2, 3));
3.创建模块
在一个文件中定义模块,我们可以通过module.exports导出需要共享的内容。例如,创建一个名为math.js的模块:
// math.js
exports.add = function(a, b) {return a + b;
};
这个模块暴露了一个名为add的函数,可以在其他文件中使用。
4.模块路径
当我们使用require导入模块时,可以指定模块的相对路径或绝对路径。Node.js会根据路径找到对应的文件。
// 导入位于同一目录下的模块
const myModule = require('./myModule');// 导入核心模块(无需路径)
const fs = require('fs');
5.核心模块
Node.js提供了一些核心模块,无需安装即可使用。例如,fs模块用于文件系统操作,http模块用于创建HTTP服务器。要使用核心模块,只需使用require导入即可。
6.第三方模块
除了核心模块外,Node.js社区还创建了大量的第三方模块。我们可以使用npm(Node.js包管理器)安装并导入这些模块。
npm install express
// 导入第三方模块
const express = require('express');
7.模块的缓存
Node.js会缓存已经加载的模块,避免多次加载相同的模块。这有助于提高性能。
8.模块的循环依赖
Node.js支持模块的循环依赖,但要注意在设计时避免过度的依赖关系,以免导致代码难以理解和维护。
9.特殊模块变量
在模块中,有一些特殊的变量,如__dirname和__filename,分别表示当前模块的目录和文件路径。
10.ES6模块系统
Node.js也开始支持ECMAScript 6(ES6)的模块系统,使用import和export语法。可以通过.mjs文件扩展名或在package.json中配置"type": "module"来启用ES6模块。
这些是关于Node.js模块系统的一些关键概念。模块化使得Node.js应用程序更加模块化、可维护和可测试,同时也方便了代码的组织和重用。
五、Node.js核心API文档
Node.js核心API文档包含了关于Node.js运行时环境中可用的核心模块的详细信息,这些模块提供了许多基础的功能,涵盖了文件系统、网络通信、事件处理、加密、进程控制等各个方面。让我们深入了解每个提到的 Node.js 模块和概念:
1. 全局对象(Global Object)
- process(进程): process 对象提供有关 Node.js 进程的信息,并允许您控制进程。它包含属性,如 process.env 用于环境变量,以及方法,比如 process.exit() 用于退出进程。
- console(控制台): console 对象用于在控制台打印信息。它包括方法,比如 console.log() 用于标准输出,以及其他不同类型日志的方法。
2. 文件系统(File System)
- fs: fs 模块提供了与文件系统交互的方法。常见操作包括读取文件(fs.readFile),写入文件(fs.writeFile)和删除文件(fs.unlink)。
3. HTTP(HTTP 模块)
- http: http 模块用于创建 HTTP 服务器和客户端。这是构建 Node.js web 应用程序的基础。您可以使用 http.createServer() 创建 HTTP 服务器并处理传入的请求。
4. 网络(Net 模块)
- net: net 模块用于创建 TCP 服务器和客户端。它提供了建立和处理网络连接的方式。
5. 路径(Path 模块)
- path: path 模块用于处理文件路径。它提供了规范化路径、连接路径和提取路径特定部分的方法。
6. 事件(Event 模块)
- events: events 模块提供了事件发射器模式。可以创建发射事件的对象,并附加在事件发生时执行的函数。
7. 加密(Crypto 模块)
- crypto: crypto 模块提供了加密功能。它包括哈希函数、加密和解密的方法。
8. 操作系统(OS 模块)
- os: os 模块提供有关操作系统的信息。它包括检索有关 CPU、内存和网络接口的信息的方法。
9. 定时器(Timers)
- setTimeout, setInterval: 这些函数用于安排代码在指定延迟后执行(setTimeout)或在规律间隔(setInterval)执行。
10. 流(Stream)
- stream: stream 模块用于处理数据流。流提供了以块的形式读取或写入大量数据的有效方式。
11. 模块系统(Module System)
- require, module.exports: require 函数用于导入模块,module.exports 用于从模块导出值或功能。这对于构建模块化和可维护的代码至关重要。
12. 缓存(Caching)
- Node.js 具有内置的模块缓存机制。当第一次 require 模块时,它会被缓存,后续对相同模块的 require 调用将使用缓存的版本。
13. 错误处理(Error Handling)
- Node.js 提供错误处理机制,如用于抛出异常的 throw 语句和用于捕获和处理异常的 try...catch 块。
14. 子进程(Child Processes)
- child_process: child_process 模块用于在 Node.js 中创建子进程。它允许您生成新的进程并与它们通信。
15. DNS(Domain Name System)
- dns: dns 模块用于域名解析。它提供执行 DNS 查询和将域名解析为 IP 地址的方法。
这只是Node.js核心API文档中的一部分内容。详细的文档可以在API 文档 | Node.js 中文网 (nodejs.cn)(nodejs.org/zh-cn/docs/) 上找到。Node.js核心API文档为开发者提供了在Node.js环境中构建各种应用程序的基础工具和功能。
六、异步编程
Node.js 通过事件驱动的方式处理异步操作。使用回调函数示例:
// async.js
function fetchData(callback) {setTimeout(() => {callback("Data received");}, 1000);
}fetchData((data) => {console.log(data); // 输出 "Data received",但会在1秒后显示
});
七、Express 框架
Express 是 Node.js 中常用的 Web 应用框架。安装 Express:
npm install express
创建一个简单的 Express 应用:
// app.js
const express = require('express');
const app = express();app.get('/', (req, res) => {res.send('Hello, Express!');
});const port = 3000;
app.listen(port, () => {console.log(`Server is running on port ${port}`);
});
运行应用:
node app.js
访问 http://localhost:3000 应该会看到 "Hello, Express!"。
八、异步文件操作
使用 Node.js 的文件系统模块进行异步文件读写:
// file.js
const fs = require('fs');fs.readFile('example.txt', 'utf8', (err, data) => {if (err) {console.error(err);return;}console.log(data);
});fs.writeFile('newfile.txt', 'Hello, Node.js!', (err) => {if (err) {console.error(err);return;}console.log('File created and written to successfully.');
});
结语
这是一个简单的 Node.js 入门介绍,涵盖了基础概念、模块系统、异步编程、Express 框架以及文件操作。随着深入学习,我们能够构建更复杂、高性能的应用程序。继续学习并享受使用 Node.js 的过程吧!
相关文章:

一盏茶的时间,入门 Node.js
一、.什么是 Node.js? Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时,用于构建高性能、可伸缩的网络应用。 它采用事件驱动、非阻塞 I/O 模型,使其在处理并发请求时表现出色。 二、安装 Node.js 首先,让我们从 Node.…...
关于Java多线程的一些随笔
Synchronized与ReentrantLock有哪些相同点和不同点? 在Java中,synchronized关键字和ReentrantLock类都用于管理线程间的同步,但它们在实现方式、功能和灵活性方面存在一些差异。以下是它们的相同点和不同点: 相同点 互斥性&…...
Answering difficult questions in other way
I’m not (too) sure Q:Do you think computers make life easier? A:I’m not (too) sure, to be honest, but I reckon they do make life easier because… I can’t say for sure, but … Q:Do you think computers make lif…...
RabbitMQ教程:Linux下安装、基本命令与Spring Boot集成
RabbitMQ教程:Linux下安装、基本命令与Spring Boot集成 1. RabbitMQ简介 RabbitMQ是一个开源的消息代理和队列服务器,用于通过轻量级消息传递协议(AMQP)在分布式系统中传递消息。它支持多种编程语言,包括Java、Pytho…...

王者荣耀小游戏
第一步是创建项目 项目名自拟 第二部创建个包名 来规范class 然后是创建类 GameFrame 运行类 package com.sxt; package com.sxt;import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.…...

JAVA小游戏“简易版王者荣耀”
第一步是创建项目 项目名自拟 第二部创建个包名 来规范class 然后是创建类 GameFrame 运行类 package com.sxt;import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; im…...

Nginx高级
Nginx高级 第一部分:扩容 通过扩容提升整体吞吐量 1.单机垂直扩容:硬件资源增加 云服务资源增加 整机:IBM、浪潮、DELL、HP等 CPU/主板:更新到主流 网卡:10G/40G网卡 磁盘:SAS(SCSI) HDD(机械…...

深度学习中小知识点系列(三) 解读Mosaic 数据增强
前言 Mosaic数据增强,这种数据增强方式简单来说就是把4张图片,通过随机缩放、随机裁减、随机排布的方式进行拼接。Mosaic有如下优点: (1)丰富数据集:随机使用4张图片,随机缩放,再随…...

telnet-MISC-bugku-解题步骤
——CTF解题专栏—— 题目信息: 题目:这是一张单纯的图片 作者:未知 提示:无 解题附件: 解题思路: (⊙﹏⊙)这是个什么文件pcap文件分析_pcap文件打开-CSDN博客查了一下,但没看懂,…...

大数据Doris(二十九):数据导入(Insert Into)
文章目录 数据导入(Insert Into) 一、创建导入...

jmeter测试dubbo接口
本文讲解jmeter测试dubbo接口的实现方式,文章以一个dubbo的接口为例子进行讲解,该dubbo接口实现的功能为: 一:首先我们看服务端代码 代码架构为: 1:新建一个maven工程,pom文件为: 1…...

分类预测 | Matlab实现基于DBN-SVM深度置信网络-支持向量机的数据分类预测
分类预测 | Matlab实现基于DBN-SVM深度置信网络-支持向量机的数据分类预测 目录 分类预测 | Matlab实现基于DBN-SVM深度置信网络-支持向量机的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.利用DBN进行特征提取,将提取后的特征放入SVM进行分类…...

android系统新特性——用户界面以及系统界面改进
用户界面改进 Android用户界面改进最明显的就是MD了。MD是Google于2014年推出的设计语言,它是一套完整的设计系统,包含了动画、样式、布局、组件等一系列与设计有关的元素。通过对这些行为的描述,让开发者设计出更符合目标的软件,…...
电量计驱动代码
外部电量计驱动代码,直接上代码了,懒,不做细节分析。。。。。 /** Fuelgauge battery driver** This package is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public License version 2 as* published by the Free Soft…...

如何将音频添加到视频并替换视频中的音轨
随着视频流媒体网站的流行和便携式设备的发展,你可能越来越倾向于自己制作视频并在互联网上分享。有时,你可能还需要编辑视频并为其添加背景音乐,因为音乐总是对视频的感知起着神奇的作用。 那如何给视频添加音频呢?或者如何用新…...

Android 单元测试初体验
Android 单元测试初体验 前言一、单元测试是什么?二、简单使用1.依赖2.单元测试代码简单模版及解释 总结 前言 当初在学校学安卓的时候,老师敢教学进度,翻到单元测试这一章节的时候提了两句,没有把单元测试当重点讲,只…...
HarmonyOS—ArkTS中@Observed和@ObjectLink装饰器的嵌套类对象属性变化【鸿蒙应用开发】
文章目录 ARKTS中@Observed和@ObjectLink装饰器的嵌套类对象属性变化@Observed 类装饰器说明装饰器参数类装饰器的使用@ObjectLink 变量装饰器说明装饰器参数同步类型允许装饰的变量类型被装饰变量的初始值举例装饰器的限制条件观察变化和行为表现观察的变化框架行为使用场景1.…...

设计问卷调查问题的技巧二:确定问题的结构与顺序
上篇文章中,我们了解到设计问卷调查问卷的技巧有保持问题中立、少用开放式问题、保持全名平衡的答案集、谨慎设置单一回答。在这篇文章中,我们将继续深入探讨设计问卷调查问题的剩余5大技巧! Tip5:注意问题的顺序 虽然您可以任意…...

kubernetes使用nfs创建pvc部署mysql stateful的方法
kubernetes创建的pod默认都是无状态的,换句话说删除以后不会保留任何数据。 所以对于mysql这种有状态的应用,必须使用持久化存储作为支撑,才能部署成有状态的stateful. 最简单的方法就是使用nfs作为网络存储,因为nfs存储很容易被…...

JavaScript WebApi(二) 详解
监听事件 介绍 事件监听是一种用于在特定条件下执行代码的编程技术。在Web开发中,事件监听器可以用于捕获和响应用户与页面交互的各种操作,如点击、滚动、输入等。 事件监听的基本原理是,通过在特定元素上注册事件监听器,当事件…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...

【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...