【H2O2|全栈】Node.js(1)

news2024/11/28 8:59:53

目录

前言

开篇语

准备工作

ES6导入导出

导入

有名导出

匿名导出

Node概念

Node导入导出

导入

有名导出

匿名导出

Node常用模块

path模块

和路径有关的全局变量

常见方法

导入方法

fs模块

常见方法

导入方法

结束语


前言

开篇语

本系列博客主要分享JavaScript的进阶语法知识,当前为Node.js部分第一期。

本期内容为:ES6导入导出,Node的概念、导入导出以及常见模块。

与基础部分的语法相比,ES6的语法进行了一些更加严谨的约束和优化,因此,在之后使用原生JS时,我们应该尽量使用ES6的语法进行代码编写。

准备工作

软件:【参考版本】Visual Studio Code

插件(扩展包):Open in browser, Live Preview, Live Server, Tencent Cloud AI Code Assistant, htmltagwrap

提示:在不熟练的阶段建议关闭AI助手

系统版本: Win10/11/其他非Windows版本

提示:node.js在当前文件夹下使用cmd运行,不在浏览器解析运行

ES6导入导出

导入

导入是指,将方法或变量从另一个js文件中以对象的形式引入当前文件。

之前,我们知道引入一个js文件是利用script标签的地址来做的,就像下面这样——

<script src='./js/jquery.min.js'></script>

如果我们需要将需要的变量导入一个js文件,就不能使用这种方式了。

ES6为我们提供了有名导出匿名导出两种方式——

有名导出

对于有名导出而言,在被导出的文件中,我们找到需要导出的变量或方法,并使用export修饰。 

export const name = "xxxx"
export const fn = () => {
     console.log("#############");
}

然后,在导入的文件中,使用下面的语法来导入我们需要的内容——

import * as 别名 from "被导入js的路径" 

其中*代表全部导出,也可以使用{变量1, 方法1, ……} 这样的形式,仅导出我们需要的内容,这种情况下不需要这个别名。

这里的别名是任意的,它是一个对象,封装了我们导出的变量、方法等。因此,想要使用导入的内容,我们需要使用该对象名称来调用(第二种导入方式直接使用导入的名称即可)。

// 方式一
import * as obj from "./js/a.js"
console.log(obj.name);
obj.fn()

// 方式二
import {name,fn} from "./js/a.js"
console.log(name);
fn()

匿名导出

匿名导出的变量或方法没有名称,使用下面的格式导出——

export default 导出的变量值或匿名方法

如果使用匿名导出的方式,则至多只能有一个匿名导出。 

在导入时,为匿名导出的内容重新设定一个名字,就像下面这样——

import myname from "./js/b.js"
console.log(myname);

Node概念

Node.js是一个基于Chrome V8引擎的JavaScript环境

浏览器是JS运行的前端环境,而Node.js是JS运行的后端环境

通常来说,在控制台使用Node + JS文件名运行使用Node语法的JS文件,此处的文件名可以省略.js后缀。

注意,Node.js无法调用DOM和BOM元素,因为无法获取到document和window,如果在代码中出现了这两个节点,将会提示未定义的错误。

Node导入导出

导入

Node使用require进行导入,参数为导入的js库或文件。

require("./js/c")

由于Node导入的内容均为js文件,所以可以省略.js后缀

导入的文件将会立刻执行,具有缓存。如果重复导入多次,则只执行一次

有名导出

Node使用exports.名字的方式来进行有名导出,就像下面这样——

exports.name = "####"
exports.fn = () => {
    console.log("我是一个函数..");   
}

require()返回一个对象,该对象具有导出的全部内容,因此直接使用一个变量来接导出内容即可。

const obj =  require("./js/d")

或者使用一个对象,来接具体需要导出的内容,此时就不需要使用对象名.xxx这样的形式调用了。

const {name,fn} =  require("./js/d")

导出内容的使用方式同ES6。

匿名导出

Node使用module.exports = 导出内容的方式来进行匿名导出,就像下面这样——

module.exports = {
    name:"小明",
    say() {
         console.log("xxxx在说话....");   
    }
}

同样的,module.exports也只能有一个,否则只保留最后一次匿名导出的内容。

使用方式和有名导出相同。

Node常用模块

path模块

和路径有关的全局变量

Node有两个和路径相关的常用的全局变量——

变量名含义
__dirname当前文件的父文件夹的绝对路径
__filename当前文件的绝对路径

常见方法

path常用的方法有下面五种——

方法和参数作用

path.basename(yourpath[, suffix])

获取文件名称,如a.txt
path.dirname(yourpath)获取文件的父级目录
path.extname(yourpath)获取文件的后缀名(类型,如.txt)
path.resolve([...paths])路径拼接操作
path.normalize(path)路径矫正操作

这里的yourpath为__filename

注意,如果使用base(yourpath, 文件后缀名),可以返回没有后缀名的文件名。

对于resolve(),我们常用它来获取同一父级下其他文件,比如:

const url = resolve(__dirname,"js","a.js")

对于normalize(),如果路径中有多余的 / 或 \,将自动被去除。

导入方法

我们可以使用require一次性导入上述的方法——

const {basename,dirname,extname,resolve,normalize} = require("path")

不要忘记导入拼接路径的方法——

const { resolve } = require("path")

fs模块

常见方法

fs模块用于文件的读写操作,常见的方法有下面这些——

方法和参数作用
writeFile(yourpath, data)覆盖写(异步),覆盖上一次写入的内容
writeFileSync()覆盖写(同步)
appendFile(yourpath, data)

追加写(异步),在上一次写入的内容后写入

可以使用\r\n为新写入的内容添加换行

appendFileSync()追加写(同步)
readFileSync(yourpath, charset)读取(同步)
existsSync(yourpath)判断文件是否存在(同步)
unlinkSync(yourpath)删除文件

我们常将writeFile(),appendFile()和readFileSync()放在try-catch语句中,并在catch语句中捕获错误err。

导入方法

我们可以使用require一次性导入上述的方法——

const { writeFile, writeFileSync, appendFile, appendFileSync,
    readFile, readFileSync, existsSync, unlinkSync } = require("fs")

结束语

本期内容到此结束。关于本系列的其他博客,可以查看我的JS进阶专栏。

在全栈领域,博主也只不过是一个普通的萌新而已。本系列的博客主要是记录一下自己学习的一些经历,然后把自己领悟到的一些东西总结一下,分享给大家。

文章全篇的操作过程都是笔者亲自操作完成的,一些定义性的文字加入了笔者自己的很多理解在里面,所以仅供参考。如果有说的不对的地方,还请谅解。

==期待与你在下一期博客中再次相遇==

——临期的【H2O2】

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

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

相关文章

【模型学习之路】PyG的使用+基于点的任务

这一篇是关于PyG的基本使用 目录 前言 PyG的数据结构 演示 图的可视化 基于点的任务 任务分析 MLP GCN 前言 对图结构感兴趣的朋友可以学一下常用的有关图结构的库&#xff1a;networkx详细介绍 networkx 库&#xff0c;探讨它的基本功能、如何创建图、操作图以及其常…

如何监控Elasticsearch集群状态?

大家好&#xff0c;我是锋哥。今天分享关于【如何监控Elasticsearch集群状态&#xff1f;】面试题。希望对大家有帮助&#xff1b; 如何监控Elasticsearch集群状态&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 监控 Elasticsearch 集群的状态对于确保…

Edify 3D: Scalable High-Quality 3D Asset Generation

Deep Imagination Research | NVIDIA 目录 一、Abstract 二、核心内容 1、多视图扩散模型 3、重建模型&#xff1a; 4、数据处理模块&#xff1a; 三、结果 1、文本到 3D 生成结果 2、图像到 3D 生成结果 3、四边形网格拓扑结构 一、Abstract NVIDIA 开发的用于高质量…

QUAD-MxFE平台

QUAD-MxFE平台 16Tx/16Rx直接L/S/C频段采样相控阵/雷达/电子战/卫星通信开发平台 概览 优势和特点 四通道MxFE数字化处理卡 使用MxFE的多通道、宽带系统开发平台 与Xilinx VCU118评估板&#xff08;不包括&#xff09;搭配使用 16个RF接收(Rx)通道&#xff08;32个数字Rx通道…

操作系统 锁——针对实习面试

目录 操作系统 锁什么是死锁&#xff1f;说说死锁产生的条件&#xff1f;死锁如何预防&#xff1f;死锁如何避免&#xff1f;银行家算法具体怎么操作&#xff1f;死锁如何解决&#xff1f;死锁会产生什么影响&#xff1f;乐观锁与悲观锁有什么区别&#xff1f; 操作系统 锁 什么…

UI设计-色彩、层级、字体、边距(一)

一.色彩&#xff1a;色彩可以影响人的心理与行动&#xff0c;具有不同的象征意义&#xff1b;有冷暖&#xff0c;轻重&#xff0c;软硬等等。 1.色彩情绪&#xff1a;最直观的视觉感受 一个活动的页面所用的颜色必须要与其内容相适应&#xff0c;让人看起来舒服。有时我们会不…

从入门到精通数据结构----四大排序(上)

目录 首言&#xff1a; 1. 插入排序 1.1 直接插入排序 1.2 希尔排序 2. 选择排序 2.1 直接选择排序 2.2 堆排序 3. 交换排序 3.1 冒泡排序 3.2 快排 结尾&#xff1a; 首言&#xff1a; 本篇文章主要介绍常见的四大排序&#xff1a;交换排序、选择排序、插入排序、归并排…

【C++第三方库】Muduo库结合ProtoBuf库搭建服务端和客户端的过程和源码

每日激励&#xff1a;“不设限和自我肯定的心态&#xff1a;I can do all things。 — Stephen Curry” 绪论​&#xff1a; 本章我将结合之前的这俩个第三方库快速上手protobuf序列化和反序列化框架和muduo网络&#xff0c;来去实现muduo库在protocol协议搭建服务端和客户端。…

Scala—Map用法详解

Scala—Map用法详解 在 Scala 中&#xff0c;Map 是一种键值对的集合&#xff0c;其中每个键都是唯一的。Scala 提供了两种类型的 Map&#xff1a;不可变 Map 和可变 Map。 1. 不可变集合&#xff08;Map&#xff09; 不可变 Map 是默认的 Map 实现&#xff0c;位于 scala.co…

文本处理之sed

1、概述 sed是文本编辑器&#xff0c;作用是对文本的内容进行增删改查。 和vim不一样&#xff0c;sed是按行进行处理。 sed一次处理一行内容&#xff0c;处理完一行之后紧接着处理下一行&#xff0c;一直到文件的末尾 模式空间&#xff1a;临时储存&#xff0c;修改的结果临…

了解网络威胁情报:全面概述

网络威胁情报 CTI 是指系统地收集和分析与威胁相关的数据&#xff0c;以提供可操作的见解&#xff0c;从而增强组织的网络安全防御和决策过程。 在数字威胁不断演变的时代&#xff0c;了解网络威胁情报对于组织来说至关重要。复杂网络攻击的兴起凸显了制定强有力的策略以保护敏…

Python 海龟绘图 turtle 的介绍

python的计算生态中包含标准库和第三方库 标准库&#xff1a;随着解释器直接安装到操作系统中的功能模块 第三方库&#xff1a;需要经过安装才能使用的功能模块 库Library 包 Package 模块Module 统称为模块 turtle 是一个图形绘制的函数库&#xff0c;是标准库&#…

学习日志017--python的几种排序算法

冒泡排序 def bubble_sort(alist):i 0while i<len(alist):j0while j<len(alist)-1:if alist[j]>alist[j1]:alist[j],alist[j1] alist[j1],alist[j]j1i1l [2,4,6,8,0,1,3,5,7,9] bubble_sort(l) print(l) 选择排序 def select_sort(alist):i 0while i<len(al…

java集合及源码

目录 一.集合框架概述 1.1集合和数组 数组 集合 1.2Java集合框架体系 常用 二. Collection中的常用方法 添加 判断 删除 其它 集合与数组的相互转换 三Iterator(迭代器)接口 3.0源码 3.1作用及格式 3.2原理 3.3注意 3.4获取迭代器(Iterator)对象 3.5. 实现…

⭐️ GitHub Star 数量前十的工作流项目

文章开始前&#xff0c;我们先做个小调查&#xff1a;在日常工作中&#xff0c;你会使用自动化工作流工具吗&#xff1f;&#x1f64b; 事实上&#xff0c;工作流工具已经变成了提升效率的关键。其实在此之前我们已经写过一篇博客&#xff0c;跟大家分享五个好用的工作流工具。…

【Jenkins】自动化部署 maven 项目笔记

文章目录 前言1. Jenkins 新增 Maven 项目2. Jenkins 配置 Github 信息3. Jenkins 清理 Workspace4. Jenkins 配置 后置Shell脚本后记 前言 目标&#xff1a;自动化部署自己的github项目 过程&#xff1a;jenkins 配置、 shell 脚本积累 相关连接 Jenkins 官方 docker 指导d…

杂7杂8学一点之多普勒效应

最重要的放在最前面&#xff0c;本文学习资料&#xff1a;B站介绍多普勒效应的优秀视频。如果上学时老师这么讲课&#xff0c;我估计会爱上上课。 目录 1. 多普勒效应 2. 多普勒效应对通信的影响 3. 多普勒效应对低轨卫星通信的影响 1. 多普勒效应 一个小石头扔进平静的湖面…

【python数据结构算法】排序算法 #冒泡 #选择排序 #快排 #插入排序

思维导图 一、经典冒泡 冒泡排序&#xff1a;是一种简单的排序算法&#xff0c;它重复的遍历要排序的序列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误&#xff0c;就把他们交换过来。 冒泡排序算法的运作如下&#xff1a; 比较相邻的元素。如果第一个比第二…

Linux系统之fuser命令的基本使用

Linux系统之fuser命令的基本使用 一、fuser命令介绍二、fuser命令使用帮助2.1 help帮助信息2.1 基本语法①通用选项②文件/设备相关选项③网络相关选项④进程操作选项⑤其他选项 三、fuser命令的基本使用3.1 查找挂载点的进程3.2 查看指定设备进程信息3.3 查找监听特定端口的进…

stable Diffusion官方模型下载

v2-1_768-ema-pruned.safetensors 下载地址&#xff1a; https://huggingface.co/stabilityai/stable-diffusion-2-1/tree/main 下载完成后&#xff0c;放到&#xff1a;E:\AITOOLS\stable-diffusion-webui\models\Stable-diffusion 模型&#xff1a;sd_xl_base_1.0.safetens…