2021-08-05 丢失的笔记 Node.js模块化开发理念讲解 + 系统模块path路径拼接

2021/8/5
之前丢了一小部分笔记,给他补上

一、JavaScript开发弊端

javascript在使用的时候存在两大问题,文件依赖和命名冲突

    1. 文件依赖:如果你在开发过程中,引用了网上一个轮播图的a.js文件,但是它没有运行起来,经过一系列的分析和排查之后,发现a.js要引用b.js,引入之后发现b.js要引入c.js,最后在a.js中引入了b.js和c.js才能让这个轮播图实现,虽然我们能够实现了,但是这个过程是非常痛苦和烦锁的。 node.js中的模块化开发可以解决这个问题,模块化开发中直接写明了当前js文件需要引用哪些另外的文件
    1. 命令冲突: 在javascrip中文件与文件之间是开放的,在学习过程中,会发现有大量的变量重合过程,对于javascript来说,会出现变量覆盖这种情况,那么前面声明的变量就没有用了,所以可能导致一些小的功能不能实现。 在模块化开发中,实现了文件半封闭,我想让哪些代码在后续的程序中使用到,就把这些代码开放出去,其他代码都是封闭的,不允后面使用



二、Node.js模块化开发

1. 软件中的模块化开发

一个功能就是一个模块,多个模块可以组成完整应用,抽离一个模块不会影响其他功能的运行

请添加图片描述

2. Node.js中模块化开发规范

  • Node.js规定一个javascript文件就是一个模块,模块内部定义的变量和函数默认情况下在外部无法得到
  • 模块内部可以使用exports对象进行成员导出,使用require方法导入其他模块
    请添加图片描述
//a.js
const a = 10, b = 15;
const add = a + b;
exports.add = add;  //第一个add是exports属性,第二个add是变量
//b.js
const a = require('./a.js');
console.log(a.add);    // 25

3. 模块成员导出的另一种方式

module.exports.version = version;
module.exports.sayHi = sayHi;

exports是module.exports的别名(地址引用关系),导出对象最终以module.exports为准


三、系统模块

1. 什么是系统模块

Node运行环境提供的API。 因为这些API都是以模块化的方式进行开发的, 所以我们又称Node运行环境提供的API为系统模块
请添加图片描述

2. 系统模块fs操作

f:file 文件 ,s:system 系统,文件操作系统。

2.1 读取文件操作
  • fs.readFile是对硬盘的操作,对文件进行读取,需要耗时,那么我们需要使用回调函数的方式来获取文件读取结果
  • 回调函数包含两个参数
const fs = require('fs');
fs.reaFile('文件路径/文件名称'[,'文件编码'], callback);
// 1. 通过模块的名字fs对模块进行引用 
const fs = require('fs');
// 2. 通过模块内部的readFile方法 读取文件内容
fs.readFile('./01.helloworld.js', 'utf8', (err, result) => {
	// 如果文件读取出错 err 是一个对象,包含错误信息,如果读取正确err为null
	// 如果文件读取正确 result 中存放的就是读取文件结果
	console.log(err);
	console.log(result);
})
2.2 写入文件内容

常用场景: 在网站运行的过程中,要记录网站运行情况,比如是否有报错的情况,但是程序媛是不可以一起盯着电脑屏幕的,所以我们希望当程序报错时,可以将程序写入一个错误日志中(也就是一个文件当中),最后只需要查看错误日志就可以知道哪里出了问题

fs.writeFile('文件路径/文件名称', '即将要写入的内容', callback);
 const content = '<h3>正在使用fs.writeFile写入文件内容</h3>';
 // 当目标文件不存在时,当前API会自动创建文件
 fs.writeFile('../index.html', content, err => {
   if (err != null) { 
       console.log(err);
       return;
   }
   console.log('文件写入成功');
 });

四、系统模块path路径操作

为什么要进行路径拼接

  • 不同操作系统的路径分隔符不统一
  • /public/uploads/averar
  • Windows 上是 / \
  • Linux 上是 /
4.1 路径拼接语法
path.join('路径', '路径', ...)
  // 导入path模块
 const path = require('path');
  // 路径拼接
 let finialPath = path.join('itcast', 'a', 'b', 'c.css');
  // 输出结果 itcast\a\b\c.css
 console.log(finialPath);
4.2 相对路径 VS 绝对路径
  • 大多数情况下使用绝对路径,因为相对路径有时候相对的是命令行工具的当前工作目录
  • 在读取文件或者设置文件路径时都会选择绝对路径
  • 使用__dirname或者 __filename获取当前文件所在的绝对路径
  • __dirname: 获取当前文件的父级绝对路径
  • __filename: 获取当前文件的绝对路径
const path = require('path');
console.log(__dirname);
// 输出结果: F:\传智黑马39期教学\001学习过程记录\Node
console.log(__filename);
// 输出结果: F:\传智黑马39期教学\001学习过程记录\Node\06_path.join.js 
const finalPath = path.join(__dirname, '/demo.txt');
// 输出结果: F:\传智黑马39期教学\001学习过程记录\Node\demo.txt  
console.log(finalPath);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值