【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标签的地址来做的,就像下面这样------

javascript 复制代码
<script src='./js/jquery.min.js'></script>

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

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

有名导出

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

javascript 复制代码
export const name = "xxxx"
export const fn = () => {
     console.log("#############");
}

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

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

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

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

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

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

匿名导出

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

javascript 复制代码
export default 导出的变量值或匿名方法

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

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

javascript 复制代码
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库或文件。

javascript 复制代码
require("./js/c")

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

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

有名导出

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

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

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

javascript 复制代码
const obj =  require("./js/d")

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

javascript 复制代码
const {name,fn} =  require("./js/d")

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

匿名导出

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

javascript 复制代码
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(),我们常用它来获取同一父级下其他文件,比如:

javascript 复制代码
const url = resolve(__dirname,"js","a.js")

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

导入方法

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

javascript 复制代码
const {basename,dirname,extname,resolve,normalize} = require("path")

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

javascript 复制代码
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一次性导入上述的方法------

javascript 复制代码
const { writeFile, writeFileSync, appendFile, appendFileSync,
    readFile, readFileSync, existsSync, unlinkSync } = require("fs")

结束语

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

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

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

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

------临期的【H2O2】

相关推荐
寅时码11 分钟前
从“一键部署”到“可观测、可定制的发布流”:我如何打造一个企业级部署工具
运维·开源·node.js
这是个栗子20 分钟前
【Node.js安装注意事项】-安装路径不能有空格
前端·npm·node.js
chancygcx_1 小时前
前端核心技术Node.js(二)——path模块、HTTP与模块化
前端·http·node.js
丘色果1 小时前
NPM打包时,报reason: getaddrinfo ENOTFOUND registry.nlark.com
前端·npm·node.js
自学也学好编程4 小时前
【BUG】nvm无法安装低版本Node.js:The system cannot find the file specified解决方案
node.js·bug
牧码岛4 小时前
服务端之nestJS常用异常类及封装自定义响应模块
node.js·nestjs
奕辰杰9 小时前
关于npm前端项目编译时栈溢出 Maximum call stack size exceeded的处理方案
前端·npm·node.js
yzzzzzzzzzzzzzzzzz20 小时前
node.js之Koa框架
node.js
Java陈序员21 小时前
轻松设计 Logo!一款 Pornhub 风格的 Logo 在线生成器!
vue.js·node.js·vite
gongzemin1 天前
使用Node.js开发微信第三方平台后台
微信小程序·node.js·express