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

发布于:2024-11-28 ⋅ 阅读:(28) ⋅ 点赞:(0)

目录

前言

开篇语

准备工作

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】