Node.js 入门

转载请注明出处,点击此处 查看更多精彩内容。

什么是 Node.js ?

Node.js 是一个基于 Chrome V8 引擎的开源的跨平台的 JavaScript 运行时环境。
Node.js 采用了基于事件的、单线程的异步 I/O 架构。

Node.js 的组成部分

  • V8引擎
    V8 引擎就是 JavaScript 解释器,它负责解析和执行 JavaScript 代码。
  • 本地模块
    本地是封装了通用功能的对性能要求较高的提前编译好的二进制文件,如 libuvopenssl
  • 标准库
    标准库是 Node.js 提供给开发人员的兼容各平台的一套 JavaScript 接口。

安装 Node.js

  • 手动下载安装,查看下载
  • 使用包管理器,查看包管理器

从命令行运行 Node.js 脚本

当前目录创建 hello.js 文件:

echo console.log('Hello Node.js') > hello.js

执行 hello.js

node hello.js

从命令行接收参数

从命令行接收参数

  • 可以传入任意数量的参数。
  • 参数可以是独立的(如 p1),也可以具有键值(如 --p2=p2value)。
  • 在脚本中使用 process.argv 接收参数。
  • 推荐使用 minimist 解析键值参数。
  • 推荐使用 inquirer.js 制作命令行交互。

输出到命令行

Node.js 提供了 console 模块,该模块提供了大量非常有用的与命令行交互的方法,它基本上与浏览器中的 console 对象相同。

console

日志美化:

  • 转义序列:转义序列是一组标识颜色的字符,可以在控制台中为字符串着色。
  • chalk:修改字符样式,如下划线、斜体、颜色、背景色等。
  • progress:灵活的 ASCII 进度条。

Node.js 内置模块

Node.js 有一套内置模块,无需安装即可使用。

Node.js 内置模块

导入内置模块:

const module = require(module_name)

路径模块(path)

path 模块提供了许多非常实用的函数来访问文件系统并与文件系统进行交互。

  • path.basename() 获取路径的最后一部分。
  • path.dirname() 获取路径的目录。
  • path.extname() 获取路径的扩展名。
  • path.isAbsolute() 判断是否是绝对路径。
  • path.join() 连接路径的两个或多个部分。
  • path.normalize() 计算包含 . .. // 等相对说明符时对应的真实路径。
  • path.parse() 解析路径为一个 JavaScript 对象(root、dir、base、name、ext)。
  • path.relative() 基于当前工作目录,返回从第一个路径到第二个路径的相对路径。
  • path.resolve() 获得相对路径的绝对路径。

文件系统模块(fs)

fs 模块提供了许多非常实用的函数来访问文件系统并与文件系统进行交互。

  • fs.access() 检查文件是否存在,以及 Node.js 是否有权限访问。
  • fs.appendFile() 追加数据到文件。如果文件不存在,则创建文件。
  • fs.chmod() 更改文件(通过传入的文件名指定)的权限。
  • fs.mkdir() 新建文件夹。
  • fs.readdir() 读取文件夹的内容。
  • fs.copyFile() 拷贝文件。
  • fs.readFile() 读取文件的内容。
  • fs.writeFile() 将数据写入文件。
  • fs.rename() 重命名文件或文件夹。
  • fs.rmdir() 删除文件夹。
  • fs.realpath() 将相对的文件路径 . .. 解析为完整的路径。
  • fs.createReadStream() 创建可读的文件流。
  • fs.createWriteStream() 创建可写的文件流。
  • fs.watchFile() 开始监视文件上的更改。

fs 模块所有的方法默认情况下都是异步的,想要同步工作需要调用对应的 sync 函数,如:fs.writeSync()

事件模块(events)

events 模块为提供了 EventEmitter 类,这是在 Node.js 中处理事件的关键。

const EventEmitter = require('events')
const emitter= new EventEmitter()
  • emitter.on() 添加事件被触发时的回调函数。
  • emitter.once() 添加事件被触发时的回调函数,该回调只会被调用一次。
  • emitter.off() 移除指定的监听器。
  • emitter.emit() 按照事件被注册的顺序同步地调用每个事件监听器。
  • emitter.eventNames() 获取当前 EventEmitter 对象上注册的所有事件的名称数组。
  • emitter.listenerCount() 获取指定事件监听器个数。
  • emitter.listeners() 获取指定事件的所有监听器。
  • emitter.prependListener() 将回调函数插入到队列的最前面。
  • emitter.prependOnceListener() 将回调函数插入到队列的最前面,该回调只会被调用一次。
  • emitter.getMaxListeners() 获取可以添加的监听器的最大数量。
  • emitter.setMaxListeners() 设置可以添加的监听器的最大数量(默认为 10)。

http 模块

http 模块是 Node.js 网络的关键模块。

  • http.METHODS 属性列出了所有支持的 HTTP 方法。
  • http.STATUS_CODES 属性列出了所有的 HTTP 状态代码及其描述。
  • http.globalAgent 属性是 http.Agent 类的全局实例,用于管理 HTTP 客户端连接的持久性和复用。
  • http.createServer() 创建并返回 http.Server 类的新实例。
  • http.request() 发送 HTTP 请求到服务器,并创建 http.ClientRequest 类的实例。
  • http.get() 类似于 http.request(),但会自动设置 HTTP 方法为 GET,并自动调用 req.end()

http 模块

npm 包管理器

npm 简介

npm 是 Node.js 标准的软件包管理器,具有下载/更新软件包、管理软件包的版本、运行指定任务等功能。

常用命令:

  • npm init 初始化项目。
  • npm install [<@scope>/]<pkg> 安装软件包。
  • npm update [-g] [<pkg>...] 更新软件包。
  • npm list [[<@scope>/]<pkg> ...] 查看已安装的软件包。
  • npm outdated 查询当前项目中安装的已过时的软件包。
  • npm view <pkg>[@<version>] [<field>[.subfield]...] 查询软件包在 npm 仓库中的最新可用版本。
  • npm run <task-name> 运行指定任务。

package.json 和 package-lock.json

package.json 文件是用 JSON 格式组织的项目清单,它是 npm 和 yarn 存储已安装软件包的名称和版本的地方,也可以用于工具(如 huskybabel)的配置。
package-lock.json 文件旨在跟踪被安装的每个软件包的确切版本,以便产品可以以相同的方式被 100% 复制(即使软件包的维护者更新了软件包)。

package.json 和 package-lock.json

使用 npm 管理软件包

使用 npm 管理软件包

默认情况下,执行 npm install 命令时软件包会被安装到当前文件夹的 node_modules 子文件夹下,该软件包只对当前项目有效,使用 -g 标志可以执行全局安装,使用 npm root -g 可以查询全局安装目录。

npm 的语义版本控制

语义版本控制的概念很简单,所有的版本都是由 . 分割的 3 个数字组成:x.y.z,3 个数字分别表示主版本号、次版本号和补丁版本号。

当发布新的版本时,不仅仅是随心所欲地增加数字,还要遵循以下规则:

  • 当进行不兼容的 API 更改时,则升级主版本。
  • 当以向后兼容的方式添加功能时,则升级次版本。
  • 当进行向后兼容的缺陷修复时,则升级补丁版本。

依赖包更新规则配置:

  • ^:保持主版本号,若主版本号为 0,则保持次版本号。
  • ~:保持主版本号和次版本号。
  • >:接受高于指定版本的任何版本。
  • >=:接受等于或高于指定版本的任何版本。
  • <=:接受等于或低于指定版本的任何版本。
  • <:接受低于指定版本的任何版本。
  • =:接受确切的版本。
  • -:接受一定范围的版本。例如:2.1.0 - 2.6.2。
  • ||:组合集合。例如 < 2.1 || > 2.6。
  • 无符号: 仅接受指定的特定版本(例如 1.2.1)。
  • latest: 使用可用的最新版本。

使用 Express 搭建 Web 服务器

Express 简介

Express 是最流行的 Node.js 框架之一,是许多其它流行 Node 框架 的底层库。它提供了以下机制:

  • 为不同 URL 路径中使用不同 HTTP 动词的请求(路由)编写处理程序。
  • 集成了“视图”渲染引擎,以便通过将数据插入模板来生成响应。
  • 设置常见 Web 应用设置,比如用于连接的端口,以及渲染响应模板的位置。
  • 在请求处理管道的任何位置添加额外的请求处理“中间件”。

虽然 Express 本身是极简风格的,但是开发人员通过创建各类兼容的中间件解决了几乎所有的 Web 开发问题。这些库可以实现 cookie、会话、用户登录、URL 参数、POST 数据、安全头等功能。

Express 路由

路由用于确定应用程序如何响应对特定端点的客户端请求,包含一个 URI(或路径)和一个特定的 HTTP 请求方法(GET、POST 等)。

路由定义采用以下结构:app.method(path, ...handler)

  • appexpress 的实例。
  • method(路由方法)是由 HTTP 请求方法派生出的 express 实例函数,附加在 Express 类的实例上,Express 支持对应于 HTTP 方法的以下路由方法:getpostputheaddeleteoptionstracecopypatch 等。
  • path(路由路径)是服务器上的路径,路由路径与请求方法相结合,用于定义可以在其中提出请求的端点。路由路径可以是字符串、字符串模式或正则表达式。
  • handler(路由处理程序)是在路由匹配时执行的处理函数,是一个函数、一组函数或者两者的结合,以类似于中间件的行为方式来处理请求。可以对路由施加先决条件,在没有理由继续执行当前路由的情况下,可将控制权传递给后续路由。通过调用响应对象的方法(如 sendjsonend)可以向客户机发送响应,并终止请求/响应循环。如果没有从路由处理程序调用其中任何方法,客户端请求将保持挂起状态。

express.Router

使用 express.Router 类来创建可安装的模块化路由处理程序,Router 实例是完整的中间件和路由系统。

在应用程序目录中创建名为 birds.js 的路由器文件,并使用 express.Router 创建一个路由模块,然后在应用程序中装入路由器改模块:

express.Router

此应用程序现在可处理针对 /birds//birds/mine 的请求,并调用特定于此路由的中间件函数。

Axios

Axios 是一个基于 Promise 的可以用于浏览器和 Node.js 的网络请求库。在服务端它使用 Node.js 的 http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequest

Axios 特性:

  • 从浏览器创建 XMLHttpRequests
  • 从 Node.js 创建 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求和响应数据
  • 取消请求
  • 自动转换 JSON 数据
  • 客户端支持防御 XSRF

Axios

Node.js 中使用 TypeScript

TypeScript

TypeScript 是由 Microsoft 维护和开发的一个非常流行的开源语言。
它是 JavaScript 的超集,为语言增加了新的功能,最值得注意的新功能是静态类型定义,这是普通 JavaScript 中所没有的。
通过类型定义,我们可以声明期望的参数类型,以及在函数中确切返回的参数,或者所创建对象的确切是什么。 和编辑器代码检查配合,在编写代码时即可发现错误,它使我们的代码更安全,更健壮。

TypeScript

tsconfig.json

如果一个目录下存在一个 tsconfig.json 文件,那么它意味着这个目录是 TypeScript 项目的根目录,tsconfig.json 文件指定了用来编译这个项目的根文件和编译选项。

安装 TypeScript 后可使用 tsc --init 命令生成 tsconfig.json 文件。

tsconfig.json

tsconfig.json 配置:

  • compilerOptions 指定编译配置,不指定时编译器会使用默认值。
  • compileOnSave 配置 IDE 在保存文件的时候是否根据重新编译。
  • files 指定一个包含相对或绝对文件路径的列表。
  • includeexclude 属性指定一个文件 glob 匹配模式列表。支持的通配符如下:
    • * 匹配0或多个字符(不包括目录分隔符)
    • ? 匹配一个任意字符(不包括目录分隔符)
    • **/ 递归匹配任意子目录
  • extends 的值是一个字符串,包含指向另一个要继承文件的路径。

Node.js 中使用 TypeScript

安装依赖:

npm install typescript

编译 TypeScript 文件为 JavaScript 文件:

tsc xxx.ts

安装 ts-node

npm install ts-node @typs/node

使用 ts-node 直接运行 ts 文件:

npx ts-node xxx.ts

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

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

相关文章

使用 React 和 GPT-4 技术构建智能语言翻译应用

Midjourney 创作&#xff0c;Language Translation in future在今天的互联世界中&#xff0c;语言翻译在弥合沟通差距和促进全球合作方面发挥着至关重要的作用。随着像 OpenAI 的 GPT-4 这样先进的 AI 模型的出现&#xff0c;我们现在有机会创建高度精确和上下文感知的翻译工具…

USB键盘实现——带指示灯的键盘(九)

文章目录带指示灯的键盘set_report 类特殊请求实现类特殊请求USB 控制端点收到的数据增加一个输出端点实现配置描述符集合输出端点收到的数据带指示灯的键盘 要实现带指示灯的键盘&#xff0c;有两种方式 除控制端点和输入端点外&#xff0c;不额外增加端点&#xff0c;根据 …

不完全微分算法(SCL+ST代码)

PID控制器的基本算法,可以参看专栏的系列文章,链接如下: 三菱FX3U PLC 位置式PID算法(ST语言)_fx3u pid_RXXW_Dor的博客-CSDN博客三菱PLC自带的PID不必多说,大家可以自行查看指令说明。关于FX3U 增量式PID可以参看专栏的另一篇博客三菱PLC增量式PID算法FB(带死区设置和外部…

springCloud学习【3】之Docker完整版

文章目录一 初识Docker1.1 应用部署的环境问题1.2 Docker简介1.3 Docker解决操作系统环境差异1.4 Docker和虚拟机的区别1.5 Docker架构1.5.1 镜像和容器1.5.2 DockerHub1.5.3 Docker架构1.5.4 Docker工作流1.6 Docker的安装和启动1.7 安装步骤1.8 启动Docker1.9 配置镜像加速二…

总结802

早上&#xff1a; 6:23起床 6:43出门 7:00~7:40小湖读书 8:00~9:45机器人控制 9:50~11:30句句真研 11:31~12:10吃饭 12:12~12:22动漫 12:45~2:09午觉 2:00~4:15深度学习 4:26~4:39去图书馆 4:40~6:11高等数学第五讲 6:13~6:40跑步开合跳100胯下击掌100 6:50~7:20吃…

PS基础操作-抠图与导出-学习记录

目录 注&#xff1a;PS版本为2022&#xff0c;有个智能对象选择功能比较方便抠图 第一步&#xff1a;导入图像文件 第二步&#xff1a;基础的画布界面移动 鼠标滚轮上下滑动&#xff0c;可以是上下滚动界面 按住ctrl鼠标滚轮&#xff0c;可以左右滚动界面 按住alt鼠标滚轮…

华为OD机试题,用 Java 解【快递货车】问题 | 含解题说明

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典本篇题目:快递货车 题目 一辆运送快递的…

【python刷题】LeetCode 2057E 值相等的最小索引(5种简单高效的解法)

作者&#xff1a;20岁爱吃必胜客&#xff08;坤制作人&#xff09;&#xff0c;近十年开发经验, 跨域学习者&#xff0c;目前于海外某世界知名高校就读计算机相关专业。荣誉&#xff1a;阿里云博客专家认证、腾讯开发者社区优质创作者&#xff0c;在CTF省赛校赛多次取得好成绩。…

问答ChatGPT-4:探索未来微数据中心IDC的发展趋势

从去年年底开始到现在&#xff0c;大众对以ChatGPT-4为主的人工智能AI的话题讨论盛况空前。这是一款由OpenAI发布的聊天机器人模型&#xff0c;一经上线&#xff0c;短短5天完成100万用户积累&#xff0c;并在最近实现月活用户破亿。实际上&#xff0c;ChatGPT和智能客服、智能…

CN RedGolf 集团利用 KEYPLUG 后门攻击 Windows 和 Linux 系统

被追踪为 RedGolf 的 CN 国家支持的威胁活动组织被归因于使用名为 KEYPLUG 的自定义 Windows 和 Linux 后门。 Recorded Future 告诉 The Hacker News&#xff1a;“RedGolf 是一个特别多产的CN国家支持的威胁组织&#xff0c;可能多年来一直活跃于全球范围内的广泛行业。” …

HandlerInterceptor拦截器的原理

是什么 HandlerInterceptor拦截的是请求&#xff0c;是springMVC项目中的拦截器&#xff0c;它拦截的目标是请求的地址。也就是说&#xff0c;它可以对请求进行拦截处理&#xff0c;所有实现了HandlerInterceptor&#xff0c;并且进行了配置的的类&#xff0c;都有这个能力&am…

第四章 共享模型之 管程 (下)

JUC并发编程系列文章 http://t.csdn.cn/UgzQi 文章目录JUC并发编程系列文章前言七、wait -- notify1、为什么使用 wait2、 wait -- notify 原理3、API 介绍八、wait -- notify 的正确姿势示例一&#xff1a;sleep会拿着锁睡觉&#xff0c;阻碍其它线程执行示例二&#xff1a;wa…

Eyeshot 2023 重大变化--2023版本将被Crack

Eyeshot 2023是一个基于 Microsoft .NET Framework 的 CAD 控件。它允许开发人员快速将 CAD 功能添加到 WinForms 和 WPF 应用程序。Eyeshot 提供了从头开始构建几何体、使用有限元方法对其进行分析并在其上生成刀具路径的工具。还可以使用 CAD 交换文件格式导入或导出几何图形…

操作系统页表

虚拟内存 虚拟地址到物理地址的映射以实现隔离性 每个程序有独立的地址空间&#xff0c;不相互影响 页表 地址操作简单流程 CPU向虚拟地址va加载或写入数据–>CPU将va交给内存管理单元MMU–>SATP寄存器存放着内存中存放虚拟地址到物理地址的表单–>MMU通过SATP查找…

03_C++函数

函数的分文件编写1.1头文件-函数声明//swap.h文件 #include<iostream> using namespace std;void swap(int a, int b);1.2源文件-函数定义在源文件中&#xff0c;要加上头文件引用#include "swap.h"//swap.cpp文件 #include "swap.h"void swap(int a…

最少砝码(思维+找规律)

最少砝码 前n个可以表示0~k; 第n1个为x&#xff08;x>k&#xff09;; 最大可测maxnkx; 第n1个和前n个放两边 可测得x-k&#xff1b; 让x-kk1&#xff0c;得到x2k1&#xff1b; maxn3k1&#xff1b; k1 可以用(2k1) - (k-0) 表示 k2 可以用(2k1) - (k-1) 表示 … 2k1 可以用…

Compose 动画 (八) : Compose中的动画差值器 AnimationSpec

1. AnimationSpec是什么 Android Compose中的AnimationSpec用来自定义动画规格。 啥意思呢&#xff0c;其实就是类似于传统View体系中的差值器Interpolator&#xff0c;但是比起差值器&#xff0c;又提供了更多的功能。 根据其不同的子类&#xff0c;可以来控制动画执行时长、…

运维1.12了解集中式日志管理工具 ELK 的基本用法,包括数据采集、搜索和展示

ELK 是一个由三个开源项目组成的日志管理工具&#xff0c;它们分别是 Elasticsearch、Logstash 和 Kibana。Elasticsearch 是一个基于 Lucene 的搜索引擎&#xff0c;它可以提供实时的分布式搜索和分析能力&#xff1b;Logstash 是一个日志收集和处理工具&#xff0c;可以实现多…

《白帽子讲Web安全》世界观安全

1.Web安全简史1.1中国黑客简史对于现代计算机系统来说&#xff0c;在用户态的最高权限是root&#xff0c;也是黑客们最渴望能够获取的系统最高权限。不想拿到“root”的黑客&#xff0c;不是好黑客。在现实世界中&#xff0c;真正造成破坏的&#xff0c;往往并非那些挖掘并研究…

10秒去除WPS Office弹窗广告教程(2023.3.31最新)

目录 前言 步骤 1. 右击WPS Office&#xff0c;打开文件所在目录 2. 打开第二个文件夹 3. 进入office 6文件夹 4. 找到文件ksomisc.exe 5. 右击选择以管理员身份运行 6. 打开后是下面的界面&#xff0c;点击“高级(A)...” 7. 按照下图操作 8. 最后点击退出就设置完…