node03

复习

1.昨天所学内置模块
fs/http/querystring/path
2.path.join的作用是什么
获取某一个路径,用来获取绝对路径
3.__dirname在path中的作用
当前文件夹的绝对路径
4.
5.url的全称,包含哪些部分
统一资源定位符,在这里插入图片描述
6.文件操作
7.文件夹操作
8.url的方法在这里插入图片描述

homework

目录树分析:

1)获取目标文件夹的目录内容
2)将文件或者文件夹进行划分
3)将文件或者文件夹进行打印,命令行console.log();
4)文件夹再次遍历 deep 1 |—— deep 2 | |——,按照深度进行划分,打印当前目录树

const fs=require("fs");
const path=require("path");
let target=path.join(__dirname,"./");
function loadTree(target,deep){
    let prev=new Array(deep).join(" |");
    let files=[];
    let dirs=[];
    let dirinfo=fs.readdirSync(target);
    for(let item=0;item<dirinfo.length;item++){
        let state=fs.statSync(path.join(target,dirinfo[item]));
        if(state.isFile()){
            files.push(dirinfo[item]);
        }else if(state.isDirectory){
            dirs.push(dirinfo[item]);
        }
    }
    for(let dir=0;dir<dirs.length;dir--){
        console.log(`${prev}|——${dirs[dir]}`);
        let nextPath=path.join(target,dirs[dir]);
        let nextdeep=deep+1;
        loadTree(nextPath,nextdeep);
    }
    for(let file=files.length-1;file>=0;file--){
        if(file===0){
            console.log(`${prev} └─${files[file]}`);
        }else{
            console.log(`${prev} ├─${files[file]}`);
        }
    }
}
loadTree(target,1);
邮箱注册功能分析
  1. 获取验证码
    1)产生验证码
    2)发送验证码
    3)将用户的邮箱的验证码保存
  2. 验证验证码和用户邮箱是否一致
    1)提交数据
    2)对比是否正确

可完善:
3. 短时间不能发送多次验证
4. 图片验证码
5. 手机验证码

events

  1. 移除全部事件 removeAllListener
  2. 移除单个事件 移除的监听函数必须是绑定的函数
  3. 绑定的事件可以传参数
添加事件

在这里插入图片描述
//类的继承
//实例化对象

//添加对象监听
myEmitter.once("eat",(foot,foot2)=>{
	console.log("eat"+foot+foot2);
})
myEmitter.on("play",()=>{
	console.log("play");
})
//触发对象的事件
mayEmitter.emit("eat","火山飘雪","猛龙过江");
mayEmitter.emit("play");
移除事件

在这里插入图片描述
单个事件监听移除,移除的事件必须是绑定的事件,否则会报错
fs读取文件不是流式操作,整个拿来读取,拷贝大文件会出错

stream流

  1. 流的方式读写文件
  2. req 可读流 res 可写流
  3. fs.createReadStream
  4. fs.createWriteStream
  5. copy文件 整体读取整体写入 readfile writefile
  6. copy文件 流读取整体写入 createReadStream writefile
  7. copy文件 流读取流式写入 createReadStream createWriteStream;可以用管道pipe实现简化。
    数据的传输方法,1g的内存电脑拷贝5g的电影
    三种方式流式读取流式写入
    在这里插入图片描述

可读流copy文件


const fs=require("fs");
let read=fs.createReadStream("./events.js");
let data='';
read.on("data",(chunk)=>{
	data+=chunk;
	console.log(chunk);
});
read.on("end",()=>{
	fs.writeFileSync("./events2.js",data);
});

读写流配合

const fs=require("fs");
let read=fs.createReadStream("./events.js");
let write=fs.createWriteStream("./events3.js");
let data='';
read.on("data",(chunk)=>{
	writestream.write(chunk);
	//console.log(chunk);
});

读写流配合pipe

const fs=require("fs");
let read=fs.createReadStream("./events.js");
let write=fs.createWriteStream("./events4.js");
read.pipe(writestream);

尝试用流操作copy音乐
下午:
express框架
postman

zlib

可实现文件的压缩
在这里插入图片描述

express 框架

node作为服务器的框架 express koa
express 便于我们快速开发node api接口
在这里插入图片描述
在这里插入图片描述
注册逻辑
在这里插入图片描述
登录逻辑
获取用户内容
读取文件内容
对比
在这里插入图片描述

创建node服务器

接口书写

get方法

get方法的参数通过req.query req.url
post方法 express本身不能解析消息体的数据,需要通过第三方插件 body-parser 来解析
post 数据格式有2种 x-www-form-urlencode 表单模式 application/json json
不同的数据模式对应不同的解析方式
解析代码应该放到接口的上方
在这里插入图片描述
在这里插入图片描述

跨域问题

  • 通过第三方插件 cors解决 app.use(cors());
  • 设置头文件信息

作业:
通过express完善邮箱注册登录的功能
拓展:
预习MongoDB

【直流微电网】径向直流微电网的状态空间建模与线性化:一种耦合DC-DC变换器状态空间平均模型的方法 (Matlab代码实现)内容概要:本文介绍了径向直流微电网的状态空间建模与线性化方法,重点提出了一种基于耦合DC-DC变换器状态空间平均模型的建模策略。该方法通过对系统中多个相互耦合的DC-DC变换器进行统一建模,构建出整个微电网的集中状态空间模型,并在此基础上实施线性化处理,便于后续的小信号分析与稳定性研究。文中详细阐述了建模过程中的关键步骤,包括电路拓扑分析、状态变量选取、平均化处理以及雅可比矩阵的推导,最终通过Matlab代码实现模型仿真验证,展示了该方法在动态响应分析和控制器设计中的有效性。; 适合人群:具备电力电子、自动控制理论基础,熟悉Matlab/Simulink仿真工具,从事微电网、新能源系统建模与控制研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握直流微电网中多变换器系统的统一建模方法;②理解状态空间平均法在非线性电力电子系统中的应用;③实现系统线性化并用于稳定性分析与控制器设计;④通过Matlab代码复现和扩展模型,服务于科研仿真与教学实践。; 阅读建议:建议读者结合Matlab代码逐步理解建模流程,重点关注状态变量的选择与平均化处理的数学推导,同时可尝试修改系统参数或拓扑结构以加深对模型通用性和适应性的理解。
### 创建特定节点上的用户的Ansible Playbook 以下是用于在指定节点 `node02` 和 `node03` 上分别创建用户 `user_node02` 和 `user_node03` 的 Ansible Playbook: ```yaml --- - name: Create users on specific nodes hosts: all become: yes tasks: - name: Ensure user exists on node02 user: name: user_node02 state: present shell: /bin/bash when: inventory_hostname == 'node02' - name: Ensure user exists on node03 user: name: user_node03 state: present shell: /bin/bash when: inventory_hostname == 'node03' ``` #### 解析 1. **Playbook结构** 使用 `- name: Create users on specific nodes` 定义了一个名为“Create users on specific nodes”的任务集合。目标主机设置为 `hosts: all`,表示此任务会尝试运行于所有定义的主机上。 2. **权限提升** 设置了 `become: yes` 来确保脚本能够以超级用户权限执行,这对于用户管理操作是必需的[^1]。 3. **条件判断 (`when`)** - 对于 `node02`,通过 `when: inventory_hostname == 'node02'` 判断当前正在处理的是哪个主机。 - 同样地,在 `node03` 中也应用类似的逻辑来限定任务范围。 4. **模块调用 (user)** 调用了内置的 `user` 模块,指定了用户名、状态以及默认shell类型 `/bin/bash`。这一步骤确保新用户被成功创建并具有相应的属性[^2]。 5. **动态库存支持** 如果使用基于Facts或其他方式生成的动态库存,则可以利用 Jinja2 表达式进一步扩展匹配规则,例如 {{ ansible_fqdn }} 或其他自定义标签[^3]。 --- ### 配置示例中的注意事项 如果需要额外配置Docker守护进程或者涉及更复杂的模板渲染场景(如引用[4]所示),则可以在同一playbook中加入更多task项完成相应功能集成。不过对于单纯新增用户需求而言无需如此复杂化设计即可满足基本要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值