一盏茶的时间,入门 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 的过程吧!

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

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

相关文章

为社会做贡献的EasyDarwin 4.0.1发布了,支持视频点播、文件直播、摄像机直播、直播录像、直播回放、录像MP4合成下载

经过几个月的不懈努力和测试,最新的EasyDarwin 4.0版本总算是发布出来了,功能还是老几样:文件点播、视频直播(支持各种视频源)、直播录像与回放、录像合成MP4下载,稍稍看一下细节: 文件上传与点…

【代码随想录刷题】Day18 二叉树05------延伸题目练习

文章目录 1.【113】路径总和II1.1 题目描述1.2 解题思路1.3 java代码实现 2.【105】从前序与中序遍历序列构造二叉树2.1 题目描述2.2 java代码实现 【113】路径总和II 【105】从前序与中序遍历序列构造二叉树 1.【113】路径总和II 1.1 题目描述 给你二叉树的根节点 root 和一…

win11任务栏居中/靠左设置路径

win11任务栏居中/靠左设置路径 设置-个性化-任务栏-任务栏对齐方式

Java | The last packet sent successfully to the server was xxx milliseconds ago

最近在部署代码后,后端总是会遇到这个问题,设备通道在访问数据库时经常会报错,在搜集大量资料后我以为是配置问题,首先要保证: (1)首先确定jdbc.url地址是正确的 (2&#xf…

林曦的小世界:不在担心与顾虑中蹉跎时间,Just Do It

内容来自林曦的小世界      先提问:你有没有过这样的经历,一项很想学的技艺,一件想做许久的事情,却始终下不了决心,担心左,担心右,彷徨犹豫间,时间过去了,这件事仍未…

JsonRPC协议详解(协议介绍、请求示例、响应示例)

JsonRPC协议详解 什么是RPC? RPC(远程过程调用)是一种用于实现分布式系统中不同进程或不同计算机之间通信的技术。它允许我们像调用本地函数一样调用远程计算机上的函数,使得分布式系统的开发变得更加简单和高效。 什么是JsonRP…

【Docker】从零开始:11.Harbor搭建企业镜像仓库

【Docker】从零开始:11.Harbor搭建企业镜像仓库 1. Harbor介绍2. 软硬件要求(1). 硬件要求(2). 软件要求 3.Harbor优势4.Harbor的误区5.Harbor的几种安装方式6.在线安装(1).安装composer(2).配置内核参数,开启路由转发(3).下载安装包并解压(4).创建并修改配置文件(5…

WebUI自动化学习(Selenium+Python+Pytest框架)001

开启另一篇学习之路_WebUI自动化 先来一波基础概念 1.自动化适合什么类型的项目: 重复性高,迭代频率高的回归测试。数据量大、手工难以实现的压力测试,手工执行效率低的兼容测试 2.自动化的优点: 高效率、可重复、减少人为错误、克服手工测试的局限性 3.自动化…

Java基于SpringBoot+vue的租房网站设计与实现(V2.0)

文章目录 一、前言介绍二、主要技术三、系统设计(部分)3.1、主要功能模块设计3.2、系统登录设计 四、数据库设计(部分)五、运行截图5.1、 **管理员** **登录****5.2、管理员功能模块**5.2.1、用户管理5.2.2、房屋类型管理5.2.3、房…

CountDownLatch实战应用——批量数据多线程协调异步处理(子线程执行事务回滚)

😊 作者: 一恍过去 💖 主页: https://blog.csdn.net/zhuocailing3390 🎊 社区: Java技术栈交流 🎉 主题: CountDownLatch实战应用——批量数据多线程协调异步处理(子线程执行事务…

Docker 部署 Nacos(单机),利用 MySQL 数据库存储配置信息

前面的话 默认你已经懂 Docker、docker-compose Nacos版本:v2.2.3 MySQL 版本:8.2.0 一、下载 打开 Nacos 官网 官网地址:官网 点击手册 左侧 Nacos Docker 克隆项目到本地 # 克隆项目,如果提示连接不到 github 请自行解决 …

【数据结构】树的概念以及二叉树

目录 1 树概念及结构 1.1 树的概念 1.3 树的存储 2 二叉树的概念及结构 2.1 概念 2.2 特殊的二叉树 2.3 二叉树的性质 2.4 二叉树的存储结构 1 树概念及结构 1.1 树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组…

「Verilog学习笔记」非整数倍数据位宽转换24to128

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 要实现24bit数据至128bit数据的位宽转换,必须要用寄存器将先到达的数据进行缓存。24bit数据至128bit数据,相当于5个输入数据第6个输入数据的拼接成一…

AR眼镜双目光波导/主板硬件方案

AR(增强现实)技术的发展离不开光学元件,而在其中,光波导和Micro OLED被视为AR眼镜光学方案的黄金搭档。光学元件在AR行业中扮演着核心角色,其成本高昂且直接影响用户体验的亮度、清晰度和大小等因素。AR眼镜的硬件成本中,光机部分…

测试工程师必学看系列之Jmeter_性能测试:性能测试的流程和术语

性能测试的流程 一、准备工作 1、系统基础功能验证 一般情况下,只有在系统基础功能测试验证完成、系统趋于稳定的情况下,才会进行性能测试,否则性能测试是无意义的。2、测试团队组建 根据该项目的具体情况,组建一个几人的性能测试…

【刷题宝典NO.5】

有效的括号 https://leetcode.cn/problems/valid-parentheses/ 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必…

Hugging Face宣布最受欢迎的AI机构,开源模型ChatGLM-6B广受认可

近日,Hugging Face作为开源AI社区的代表,总结了社区最欢迎的前15个公司和机构,几乎囊括了全部国内外风头正盛的AI科技机构,Stability AI、Meta AI、Runway占据排名前三,大众熟知的OpenAI、谷歌、微软也榜上有名。 其中…

C语言—冒泡排序

方法一&#xff08;不使用函数解决&#xff09; #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int arr[]{15,52,23,0,5,6,45,8,9,10};int i0;int j0;for ( i 0; i < 9; i){int flag1; //flag判断数组元素是否有序&#xff0c;这里先假设…

如何在Ubuntu系统上安装Git

简单介绍 Git是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。Git 与常用的版本控制工具CVS&#xff0c;Subversion 等不同&#xff0c;它采用了分布式版…

2018年8月28日 Go生态洞察:Go 2草案设计初探

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…