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

目录

前言

开篇语

准备工作

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.mzph.cn/web/61079.shtml

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

相关文章

matlab -炉温串级控制PID

1、内容简介 略 92-可以交流、咨询、答疑 2、内容说明 略 基于PID的反馈控制能够使得炉温控制达到较好的控制效果&#xff0c;但系统的调节时间还是较长&#xff0c;一般都大于20分钟。考虑能否用其他系统来改进控制系统使得调节时间变短的同时还能满足控制要求。一种最直接…

#渗透测试#红蓝攻防#HW#经验分享#溯源反制

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章阅 目录 一、溯源反制 1、溯源反制的重要性 2、溯源…

探索Python WebSocket新境界:picows库揭秘

文章目录 探索Python WebSocket新境界&#xff1a;picows库揭秘第一部分&#xff1a;背景介绍第二部分&#xff1a;picows库概述第三部分&#xff1a;安装picows库第四部分&#xff1a;简单库函数使用方法第五部分&#xff1a;场景应用第六部分&#xff1a;常见Bug及解决方案第…

dmdba用户资源限制ulimit -a 部分配置未生效

dmdba用户资源限制ulimit -a 部分配置未生效 1 环境介绍2 数据库实例日志报错2.1 mpp01 实例日志报错2.2 mpp02 实例日志报错 3 mpp02 服务器资源限制情况4 关闭SELinux 问题解决4.1 临时关闭 SELinux4.2 永久关闭 SELinux 5 达梦数据库学习使用列表 1 环境介绍 Cpu x86 Os Ce…

安卓悬浮窗应用外无法穿透事件问题

现象&#xff1a; 应用内悬浮窗如何设置了 WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE在自己应用内事件穿透正常&#xff0c;但到应用外就无法点击。 原因&#xff1a; 解决方法&#xff1a; layoutParams.alpha 0.8f …

c++趣味编程玩转物联网:基于树莓派Pico控制有源蜂鸣器

有源蜂鸣器是一种简单高效的声音输出设备&#xff0c;广泛应用于电子报警器、玩具、计时器等领域。在本项目中&#xff0c;我们结合树莓派Pico开发板&#xff0c;通过C代码控制有源蜂鸣器发出“滴滴”声&#xff0c;并解析其中涉及的关键技术点和硬件知识。 一、项目概述 1. 项…

ubuntu+ROS推视频流至网络

目录 概述 工具 ros_rtsp 接受流 web_video_server 源码安装 二进制安装 ros接收rtsp视频流 总结 概述 ros_rtsp功能包可以将ros视频流以rtsp形式推送 web_video_server功能包可以将ros视频话题推HTTP流 rocon_rtsp_camera_relay可以接受同一网段下的rtsp视频流输出为…

探索光耦:光耦安全标准解读——确保设备隔离与安全的重要规范

在现代科技日新月异的今天&#xff0c;光耦&#xff08;光电耦合器&#xff09;作为电子设备中不可或缺的隔离元件&#xff0c;其重要性不言而喻。它不仅在电源调控、工业自动化及医疗设备等关键领域大显身手&#xff0c;更是确保系统电气隔离与运行稳定的守护神。特别是在保障…

Qt程序发布及打包成exe安装包

参考:Qt之程序发布以及打包成exe安装包 目录 一、简述 Qt 项目开发完成之后,需要打包发布程序,而因为用户电脑上没有 Qt 配置环境,所以需要将 release 生成的 exe 文件和所依赖的 dll 文件复制到一个文件夹中,然后再用 Inno Setup 打包工具打包成一个 exe 安装包,就可以…

JAVA题目笔记(二十)异常综合小练

一、键盘录入数据 import java.text.ParseException; import java.util.InputMismatchException; import java.util.Scanner;public class Co {public static void main(String[] args) throws ParseException {//键盘录入信息int age0;String namenull;Scanner sc new Scanne…

STM32F10x 定时器

使用定时器实现&#xff1a;B5 E5的开关 添加相关的.h路径文件 添加相关的.c配置文件 led.h文件 用于声明LED函数 #ifndef __LED_H //没有定义__LED_H #define __LED_H //就定义__LED_H #define LED1_ON GPIO_ResetBits(GPIOB,GPIO_Pin_5) #defi…

shell脚本基础学习_总结篇(完结)

细致观看可以&#xff0c;访问shell脚本学习专栏&#xff0c;对应章节会有配图https://blog.csdn.net/2201_75446043/category_12833287.html?spm1001.2014.3001.5482 导语 一、shell脚本简介 1. 定义&#xff1a; 2. 主要特点&#xff1a; 3. shell脚本的基本结构 4. S…

Linux创建免密登陆(错误:Permission denied (publickey,gssapi-keyex,gssapi-with-mic))

报错截图 解决方法 1. mkdir -p ~/.ssh 2. chmod 700 ~/.ssh 3. ssh-keygen&#xff0c;一直回车 4. chmod 600 /root/.ssh/id_rsa 5. 将公钥内容追加到服务器上&#xff0c;cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 6. chmod 600 ~/.ssh/authorized_keys…

低代码平台在医疗/医院行业应用案例与优势介绍

随着医疗行业的不断发展&#xff0c;数字化管理的需求日益迫切。传统的医疗信息化管理系统开发往往面临着成本高、周期长、定制性差等问题。在这个数字化转型的浪潮下&#xff0c;低代码平台应运而生&#xff0c;为医院快速搭建高效、灵活的医疗信息化管理系统提供了全新的解决…

在 Spring Boot 中构造 API 响应的最佳实践

在平时的开发和项目中&#xff0c;我们一定会涉及到接口对接的功能&#xff0c;由于不同开发人员的编码习惯不同&#xff0c;API报文在项目中通常是"百花齐放"的。 不但增加工作难度&#xff0c;往往也是扯皮的大头&#xff0c;如果能统一报文格式&#xff0c;不但能…

多目标优化算法——多目标粒子群优化算法(MOPSO)

Handling Multiple Objectives With Particle Swarm Optimization&#xff08;多目标粒子群优化算法&#xff09; 一、摘要&#xff1a; 本文提出了一种将帕累托优势引入粒子群优化算法的方法&#xff0c;使该算法能够处理具有多个目标函数的问题。与目前其他将粒子群算法扩展…

OpenCV与AI深度学习|16个含源码和数据集的计算机视觉实战项目(建议收藏!)

本文来源公众号“OpenCV与AI深度学习”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;分享&#xff5c;16个含源码和数据集的计算机视觉实战项目 本文将分享16个含源码和数据集的计算机视觉实战项目。具体包括&#xff1a; 1. 人…

Jenkins升级到最新版本后无法启动

1. 场景还原 最近在web界面将jenkins升级到最新版本后&#xff0c;后台无法启动jenkins服务&#xff0c;服务状态如下&#xff1a; 运行jenkins命令提示invalid Java version jenkins --version jenkins: invalid Java version: java version "1.8.0_202" Java(TM)…

【计算机视觉+MATLAB】自动检测并可视化圆形目标:通过 imfindcircles 和 viscircles 函数

引言 自动检测图像中的圆形或圆形对象&#xff0c;并可视化检测到的圆形。 函数详解 imfindcircles imfindcircles是MATLAB中的一个函数&#xff0c;用于在图像中检测并找出圆形区域。 基本语法&#xff1a; [centers, radii] imfindcircles(A, radiusRange) [centers, r…

鸿蒙NEXT元服务:利用App Linking实现无缝跳转与二维码拉起

【效果】 元服务链接格式&#xff08;API>12适用&#xff09;&#xff1a;https://hoas.drcn.agconnect.link/ggMRM 生成二维码后效果&#xff1a; 【参考网址】 使用App Linking实现元服务跳转&#xff1a;文档中心 草料二维码&#xff1a;草料二维码生成器 【引言】 …