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

ops/2024/11/29 19:45:28/

目录

前言

开篇语

准备工作

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.ppmy.cn/ops/137731.html

相关文章

AI在线免费视频工具4:AI视频编辑ai-video-composer

1、ai-video-composer 使用自然语言从您的资产组成新的视频。添加视频、图像和音频资源&#xff0c;让 Qwen 2.5-Coder 为您生成一个新的视频(使用 FFMPEG) https://huggingface.co/spaces/huggingface-projects/ai-video-composer

【C/C++】深入解析 Stack 与 Queue 数据结构(详解):实现原理、应用场景与性能优化

文章目录 引言栈&#xff08;Stack&#xff09;数据结构详解1. 栈的基本概念2. 栈的实现原理3. C中的栈实现4. 栈的应用场景5. 栈的性能分析6. 实战示例&#xff1a;括号匹配 队列&#xff08;Queue&#xff09;数据结构详解1. 队列的基本概念2. 队列的实现原理3. C中的队列实现…

Rust vtable(Rust虚表、Rust虚函数表)动态绑定、Rust多态调用、通过类型引用创建trait对象(自动实例化)

文章目录 Rust vtable原理深度解析1. 什么是 vtable&#xff1f;1.1 Trait 对象和 vtableTrait对象指针结构- 一个指向数据的指针&#xff08;指向具体类型实例的数据&#xff09;- 一个指向 vtable 的指针&#xff0c;vtable 存储了该类型所有 trait 方法的函数指针 示例&…

架构第十一章:zabbix

监控体系 1.监控知识概述 &#xff08;1&#xff09;对系统不间断的实时监控 &#xff08;2&#xff09;实时反馈系统和服务状态 &#xff08;3&#xff09;保证系统和服务可靠、安全 &#xff08;4&#xff09;保证业务持续稳定运行 实时 反馈 可靠 安全 2.怎么进行监控&…

跨平台应用开发框架(1)----Qt(组件篇)

目录 1.Qt 1.Qt 的主要特点 2.Qt的使用场景 3.Qt的版本 2.QtSDK 1.Qt SDK 的组成部分 2.安装 Qt SDK 3.Qt SDK 的优势 3.Qt初识 1.快速上手 widget.cpp mian.cpp widget.h Helloworld.pro 2.对象树 3.坐标系 4.信号和槽 1. 信号和槽的基本概念 2. 信号和槽的…

[蓝桥杯 2021 省 AB2] 小平方

题目描述 小蓝发现&#xff0c;对于一个正整数 nn 和一个小于 nn 的正整数 vv&#xff0c;将 vv 平方后对 nn 取余可能小于 nn 的一半&#xff0c;也可能大于等于 nn 的一半。 请问&#xff0c;在 11 到 n−1n−1 中, 有多少个数平方后除以 nn 的余数小于 nn 的一半。 例如&…

使用Eureka实现服务注册与发现的具体案例详解

1. Eureka 的基本概念 1.1 什么是 Eureka&#xff1f; Eureka 是一个基于 REST 的服务注册和发现平台&#xff0c;主要分为以下两个组件&#xff1a; Eureka Server&#xff1a;作为服务注册中心&#xff0c;负责维护服务实例信息。Eureka Client&#xff1a;服务消费者与服…

语言模型中的多模态链式推理

神经网络的公式推导 简介摘要引言多模态思维链推理的挑战多模态CoT框架多模态CoT模型架构细节编码模块融合模块解码模块 实验结果运行代码补充细节安装包下载Flan-T5数据集准备rougenltkall-MiniLM-L6-v2运行 简介 本文主要对2023一篇论文《Multimodal Chain-of-Thought Reason…