Node.js基础【学习笔记】

一、命令行窗口、CMD窗口、终端、shell

1、打开命令行窗口

windows
cmd

2、常用的指令

dir列出当前目录下的所有文件
cd 目录名进入到指定的目录
md 目录名创建一个文件夹
rd 目录名删除一个文件名

3、目录

.表示当前目录
. .表示上一级目录

4、环境变量(windows系统中变量)

  • 当用命令行窗口打开一个文件或调用一个程序时,系统会现在当前目录下寻找文件/程序,如果找到则直接运行,如果没找到则会在 path 路径中依次查找,直到找到为止,如果最终都没找到,则报错。
  • 因此可以将常用程序或者文件的路径添加到 path 中,这样就能在任意目录下访问它们。

二、进程与线程

  • 进程
    进程负责为程序的运行提供必备的环境;
    进程相当于工厂中的车间
  • 线程
    线程是计算机中的最小的计算单位,线程负责执行进程中的程序;
    线程相当于工厂中的工人
  • 单线程
    JS是单线程
  • 多线程

三、node简介

简介:

  • Node.js 是一个能够在服务器端运行的JavaScript的开源代码、跨平台JavaScript运行环境
  • Node采用Google开发的V8引擎运行 js 代码,使用事件驱动非阻塞异步I/O模型等技术来提高性能,可优化应用程序的传输量和规模。

用途:

  • Web 服务 API,比如 REST
  • 实时多人游戏
  • 后端的 Web 服务,例如跨域、服务器端的请求
  • 基于 Web 的应用
  • 多客户端的通信,如即时通信

四、模块化

简介:

  • 在 node 中,一个 js 文件就是一个模块化

  • 在 node 中,每一个 js 文件中的 js 代码都是独立运行在一个函数当中,而不失全局作用域

详解:

  • 在 node 中,通过 require() 函数来引入外部的模块

  • require() 可以传递一个文件的路径作为参数,node将会自动根据该路径来引入外部模块,如果是相对路径,必须以 . 或 … 开头

  • 使用 require() 引入后,该函数会返回一个对象,这个对象代表的是引入的模块

  • 使用 require() 引入外部模块时,使用的就是模块标识,我们可以通过模块标识来找到指定的模块

  • 模块分为两大类:
    核心模块 —— 由node引擎踢狗(模块的名字)
    文件模块 —— 由用户自己创建 (文件的路径)

  • 在 node 中有一个全局对象 global,它的作用和网页中的window类似

  • 在全局中创建的变量都会作为 global 的属性保存
    在全局中创建的函数都会作为 global 的方法保存

  • 当 node 执行模块中的代码时,它会首先在代码前后添加如下代码:

    function (exports, require, module, _filename, _dirname) {......
    }
    
  • 实际上模块中的代码都是包裹在一个函数中执行的,并且在函数执行时,同时传递了5个实参:

    • exports: 将变量或函数暴露到外部
    • require: 函数,用来引入外部的模块
    • module: 代表的是当前模块本身(export就是module的属性)
    • _filename: 当前模块的完整路径
    • _dirname: 当前模块所在文件夹的路径

exports 和 module.exports

  • 通过 exports 只能使用 . 的方式来向外暴露内部变量(exports.xxx = xxx)
  • 而 module.exports 既可以通过 . 的形式,也可以直接赋值(module.exports.xxx = xxx / module.export = {})

五、包

  • 包结构
    —— 用于组织包中的各种文件
  • 包描述文件
    —— 描述包的相关信息,以供外部读取分析

1、包结构

  • 包实际上就是一个压缩文件,解压以后还原为目录,包含:
    • package.json 描述文件
    • bin 可执行二进制文件
    • lib js代码
    • doc 文档
    • test 单元测试

2、包描述文件

  • 包描述文件用于表达非代码相关的信息,它是一个 JSON 格式的文件 —— package.json,位于包的根目录下,是包的重要组成部分。
  • package.json 中的字段:
    • name、description、version、keywords、maintainers、contributors、bugs、licenses、repositories、dependencies、homepage、os、cpu、engine、builtin、directories、implements、scripts、author、bin、main、devDependencies。

六、NPM (Node Package Manager)

1、NPM 命令

npm -v查看npm版本
npm version查看所有模块的版本
npm帮助说明
npm search 包名搜索模块包
npm install(i) 包名在当前目录安装包
npm install 包名 -g全局模式安装包
npm install 包名 --save安装包并添加到依赖中
npm install下载当前项目所依赖的包
npm remove® 包名删除一个模块
npm install 包名 -registry=地址从镜像源安装
npm config set registry 地址设置镜像源

2、node 搜索包的流程

  • 通过 npm 下载的包都放到 node_modules 文件夹中;
  • 通过 npm 下载的包,直接通过包名引入即可;
  • node 在使用模块名字来引入模块时,它会首先在当前目录的 node_modules 文件中寻找是否含有该模块,如果有,则直接使用,否则则去上一级目录的 node_modules 文件寻找,直到找到为止。如果依然找不到,则报错。

七、Buffer 缓冲区

  • Buffer 的结构和数组很像,操作的方法也和数组类似
  • 数组中不能存储二进制文件,而 Buffer 就是专门用来存储二进制文件
  • 使用 Buffer 不需要引入模块
  • Buffer 中存储的都是二进制,但是计算机显示都是以十六进制形式显示(数据过长)
    buffer 中每一个元素的范围都是从 00 ~ ff (0 ~ 255)(00000000 - 11111111)
  • Buffer 的大小一旦确定,则不能修改,Buffer 实际上是对底层内存的直接操作
Buffer.from(str)将一个字符串转换为
Buffer.alloc(size)创建一个指定大小的 buffer
Buffer.allocUnsaafe(size)创建一个指定大小的 buffer,但是可能包含敏感数据
buf.toString()将缓冲区中的数据转换为字符串

八、fs(文件系统)

1、文件系统(File System)

  • 通过 Node 来操作系统中的文件
  • 使用文件系统需要引入 fs 模块(fs 是核心模块)
  • fs 中的所有操作都有两种形式可供选择:同步异步
  • 同步文件系统会阻塞程序的执行,也就是除非操作完毕,否则不会向下执行代码
  • 异步文件系统不会阻塞程序的执行,而是在操作完成时,通过回调函数将结果返回

2、同步文件的写入

  • 手动操作的步骤

    打开文件
    向文件中写入内容
    保存并关闭文件
    1. 打开文件:
      fs.openSync(path, flags[, mode])

      • path 要打开的文件路径

        • flags 打开文件要做的操作类型
          • r 只读的
          • w 可写的
      • mode 设置文件的操作权限(一般不传)

      返回值:

      • 该方法会返回一个文件的描述符作为结果
    2. 向文件中写入内容:
      fs.writeSync(fd, string[, position[, encoding]])

      • fd 文件的描述符,需要传递要写入文件的描述符
      • string 要写入的内容
      • position 写入的起始位置
      • encoding 写入的编码,默认 utf-8
    3. 保存并关闭文件
      fs.closeSync(fd)

      • fd 要关闭的文件的描述符

3、异步文件的写入

  1. fs.open(path, flags[, mode], callback)
    • 用来打开一个文件
    • 异步调用的方法,结果都是通过回调函数返回的
    • 回调函数两个参数
      • err 错误对象,如果没有错误则为 null
      • fd 文件的描述符
  2. fs.write(fd, string[, position[, encoding]], callback)
    • 用来异步写入一个文件
  3. fs.close(fd, callback)
    • 用来关闭文件

4、简单文件写入

fs.writeFile(file, data[, options], callback)

fs.writeFileSync(file, data[, options])

  • file 要操作文件的路径
  • data 要写入的数据
  • options 选项,可以对写入进行一些设置
    • encoding
    • mode
    • flag
  • callback 当写入完成以后执行的设置

5、打开状态(flag)

模式说明
r读取文件,文件不存在则出现异常
r+读写文件,文件不存在则出现异常
rs在同步模式下打开文件用于读取
rs+在同步模式下打开文件用于读写
w打开文件用于写操作,如果不存在则创建,如果存在则截断
wx打开i文件用于写操作,如果存在则打开失败
w+打开文件用于读写,如果不存在则创建,如果存在则截断
wx+打开文件用于读写,如果存在则打开失败
a打开文件用于追加,如果不存在则创建
ax打开文件用于追加,如果路径存在则失败
a+打开文件进行读取和追加,如果不存在则创建该文件
ax+打开文件进行读取和追加,如果路径存在则失败

6、流式文件写入

同步、异步、简单文件的写入都不适合大文件的写入,性能较差,容易导致内存溢出

fs.createWriteStream(path[, options])

  • 可以用来创建一个可写流
  • path 文件路径
  • options 配置的参数

7、文件的读取

  1. 简单文件的读取
    fs.readFile(path[, options], callback)
    fs.readFileSync(path[, options])
    • path 要读取文件的路径
    • options 读取的选项
    • callback 回调函数,通过回调函数将读取到的内容返回
      • err 错误对象
      • data 读取到的数据,会返回一个 Buffer
  2. 流式文件的读取
    fs.createReadStream(path[, options])
    pipe() 可将可读流中的内容直接输出到可写流中

8、其他操作

  • 验证路径是否存在
    fs.existsSync(path)

  • 获取文件信息
    fs.stat(path, callback)

    fs.statSync(path)

    • stat:
      • size 文件的大小
      • isFile() 是否是一个文件
      • isDirectory() 是否是一个文件夹
  • 删除文件
    fs.unlink(path, callback)
    fs.unlinkSync(path)

  • 列出文件
    fs.readdir(path[, options], callback)
    fs.readdirSync(path[, options])

    • 读取一个目录的目录结构
      • files 是一个字符串数组,每一个元素就是一个文件夹或文件的名字
  • 截断文件
    fs.truncate(path, len, callback)
    fs.truncateSync(path, len)

    • 截断文件,将文件修改为指定的大小
  • 建立目录
    fs.mkdir(path[, options], callback)
    fs.mkdirSync(path[, mode])

    • 创建一个目录
  • 删除目录
    fs.rmdir(path, callback)
    fs.rmdirSync(path)

  • 重命名文件和目录
    fs.rename(oldPath, newPath, callback)
    fs.renameSync(oldPath, newPath)

  • 监视文件更改写入
    fs.watchFile(filename[, options], listener)

    • listener 回调函数,当文件发生变化时,回调函数会执行
      • curr 当前文件的状态
      • prev 修改前文件的状态
      • 这两个对象都是 stat 对象

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

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

相关文章

LLMs之Agent:Agentscope的简介、安装和使用方法、案例应用之详细攻略

LLMs之Agent:Agentscope的简介、安装和使用方法、案例应用之详细攻略 目录 Agentscope的简介 1、更新的日志 2、支持的模型API 3、支持的服务 Agentscope的安装和使用方法 1、安装 支持的本地模型部署 从源码安装 使用pip 配置 创建Agent 构造对话 Age…

Android Release模式下无法运行一例解决方法

报错 FATAL EXCEPTION: main Process: com.tools.xxxxx, PID: 10746 androidx.fragment.app.u: Subscriber class com.tools.xxxxx.ui.HomePageFragment and its super classes have no public methods with the Subscribe annotation at j4.d.i(Unknown Source:371) 由于我使…

Go语言编程 学习笔记整理 第2章 顺序编程 后半部分

1.流程控制 1.1 条件语句 if a < 5 { return 0 } else { return 1 } 注意&#xff1a;在有返回值的函数中&#xff0c;不允许将“最终的”return语句包含在if...else...结构中&#xff0c; 否则会编译失败&#xff01;&#xff01;&#xff01; func example(x int) i…

如何从Excel读取数据并调用BAPI来批量创建销售订单

准备Excel模板&#xff1a; 确保Excel模板中的列与BAPI BAPI_SALESORDER_CREATEFROMDAT2 所需的字段相对应。每个订单的数据应按照BAPI的要求格式排列&#xff0c;可能需要包括订单头信息和订单行项目信息。 读取Excel数据&#xff1a; 使用ABAP程序或其他支持的编程语言读取E…

阿里云ECS(CentOS镜像)安装docker-方法2(三条命令完成安装)

目录 1.更新系统 2.安装 EPEL 存储库 3.安装docker 4.启动 Docker 服务 5.验证安装 6.设置开机自启动 1.更新系统 sudo yum update 2.安装 EPEL 存储库 sudo yum install epel-release 3.安装docker sudo yum install docker 4.启动 Docker 服务 补充&#xff1a;…

C++学习笔记-内联函数使用和含义

引言 内联函数是C为了优化在函数的调用带来的性能开销而设计的&#xff0c;特别是当函数体很小且频繁调用时&#xff0c;内联函数可以让编译器在调用点直接展开函数体&#xff0c;从而避免了函数调用的开销。 一、内联函数的定义与含义 1.1 定义 内联函数是通过在函数声明或…

基于 HTML+ECharts 实现智慧景区数据可视化大屏(含源码)

构建智慧景区数据可视化大屏&#xff1a;基于 HTML 和 ECharts 的实现 随着旅游业的蓬勃发展&#xff0c;智慧景区的概念逐渐深入人心。通过数据可视化&#xff0c;景区管理者可以实时监控游客流量、设施使用情况以及环境状况&#xff0c;从而提升游客体验和管理效率。本文将详…

线性代数:向量组与向量组等价

向量组概述 向量组是由若干个同维数的行向量或列向量组成的集合。这些向量可以是二维的、三维的&#xff0c;甚至是更高维度的。在数学和物理学的许多领域中&#xff0c;向量组扮演着至关重要的角色&#xff0c;特别是在线性代数、矩阵论、以及工程学中。 例如&#xff0c;一…

一份简单实用的MATLAB M语言编码风格指南

MATLAB M语言编码风格指南 1. 文件命名2. 函数命名3. 注释4. 变量命名5. 布局、注释和文档6. 代码结构7. 错误处理8. 性能优化9. 格式化输出 MATLAB M文件的编码规范对于确保代码的可读性、可维护性和一致性非常重要。下面是一份MATLAB M语言编码规范的建议&#xff0c;可以作为…

【MySQL进阶之路 | 高级篇】显式事务和隐式事务

使用事务有两种方式&#xff1a;显式事务和隐式事务。 1. 显式事务 步骤1&#xff1a; START TRANSACTION或者BEGIN&#xff0c;作用是显式开启一个事务。 START TRANSACTION语句相较于BEGIN特别之处在于&#xff0c;后面能跟几个修饰符。比如&#xff1a; READ ONLY&…

《梦醒蝶飞:释放Excel函数与公式的力量》18.2 数据可视化技术

第18章&#xff1a;创建图表和数据可视化 18.2 数据可视化技术 数据可视化是将数据转化为图形和图表的过程&#xff0c;以便更好地理解和分析数据。有效的数据可视化可以揭示数据的模式、趋势和异常&#xff0c;从而帮助做出更明智的决策。以下将介绍几种常用的数据可视化技术…

hcip学习 多实例生成树,VRRP工作原理

一、STP 和 RSTP 解决了什么问题 1、STP&#xff1a;解决了在冗余的二层网络中所出现的环路问题 2、RSTP&#xff1a;在 STP 的基础上&#xff0c;解决了 STP 收敛速度慢的问题&#xff0c;引入了一些 STP 保护机制&#xff0c;使其网络更加稳定 二、MSTP 针对 RSTP 的改进 …

Android 13 大屏显示时关于SystemUI和Launcher3问题

当系统运行在大屏上时,原来显示SystemUI导航栏的位置会变成Launcher3的任务栏,然后导航栏的3个按键显示靠右下角显示 我的博客 1.先看SystemUI的导航栏为什么会消失,移动 /SystemUI/src/com/android/systemui/statusbar/NavigationBarController.javapublic void createNavigat…

3dsMax 设置近平面削减,靠近模型之后看不到模型,看很小的模型放大看不到

3dsMax 设置近平面削减&#xff0c;靠近模型之后看不到模型&#xff0c;看很小的模型放大看不 问题展示 解决办法_1 把这两个东西最上面的拖拽到最上面&#xff0c;最下面的拖拽到最下面。 解决办法_2 勾选视口裁剪 把这两个东西最上面的拖拽到最上面&#xff0c;最下面的…

服务器部署环境(docker安装Mysql + Redis + MongoDB)

1. 安装Docker 1、选择要安装的平台 Docker要求CentOS系统的内核版本高于3.10 uname -r #通过 uname -r 命令查看你当前的内核版本官网地址 2. 卸载已安装的Docker, 使用Root权限登录 Centos。确保yum包更新到最新。 sudo yum update如果操作系统没有安装过Docker , 就不需要…

C# 选择排序

栏目总目录 概念 选择排序&#xff08;Selection Sort&#xff09;是一种简单直观的排序算法。它的工作原理是&#xff1a;首先在未排序序列中找到最小&#xff08;或最大&#xff09;元素&#xff0c;存放到排序序列的起始位置&#xff0c;然后&#xff0c;再从剩余未排序元素…

使用Gradle构建编译Spring boot 2.7.x

一、环境准备 JDK 1.8Spring boot 2.7.xGradle 7.5.1 (安装参考&#xff1a;win11安装Gradle)Idea 2023.1 二、源码导入gitee(可选) 按需导入。如果能科学上网&#xff0c;可跳过这一步。 为避免github访问不稳定问题&#xff0c;建议将对应的代码导入到gitee。然后通过git管…

Redis的缓存问题:缓存穿透、缓存击穿和缓存雪崩

目录 一、缓存穿透 1、问题描述 2、解决方案 二、缓存击穿 1、问题描述 2、解决方案 三、缓存雪崩 1、问题描述 2、解决方案 3、雪崩案例 一、缓存穿透 1、问题描述 缓存穿透指的是⼤量请求的 key根本不存在于缓存中&#xff0c;每次针对此key的请求从缓存获取不到…

【element ui】input输入控件绑定粘贴事件,从 Excel 复制的数据粘贴到输入框(el-input)时自动转换为逗号分隔的数据

目录 1、需求2、实现思路:3、控件绑定粘贴事件事件修饰符说明: 4、代码实现&#x1f680;写在最后 1、需求 在 Vue 2 和 Element UI 中&#xff0c;要实现从 Excel 复制空格分隔的数据&#xff0c;并在粘贴到输入框&#xff08;el-input&#xff09;时自动转换为逗号分隔的数据…

推荐系统三十六式学习笔记:工程篇.常见架构24|典型的信息流架构是什么样的

目录 整体框架数据模型1.内容即Activity2.关系即连接 动态发布信息流排序数据管道总结 从今天起&#xff0c;我们不再单独介绍推荐算法的原理&#xff0c;而是开始进入一个新的模块-工程篇。 在工程实践的部分中&#xff0c;我首先介绍的内容是当今最热门的信息流架构。 信息…