### 练习讲解
1. 函数与方法
- 函数:可以独立存在,不依赖于对象。
- 方法:方法是对象的一部分,必须通过对象调用。
```js
// 【方法】定义对象
const person = {
name: "Alice",
greet: function() {
return `Hello, my name is ${this.name}!`;
}
};
```
2. Promise:处理异步操作,简化回调地狱
```js
// 定义一个任务函数,它是一个 Promise 构造函数的参数
let task = function(resolve, reject) {
// 向上取整:Math.ceil() 生成一个 0 到 5
let rnd = Math.floor(Math.random() * 5); // 生成一个 0 到 4 之间的随机整数
console.log(rnd); // 打印随机数
if (rnd < 2) {
resolve(); // 如果随机数小于 2,任务成功,调用 resolve
} else {
reject(); // 否则,任务失败,调用 reject
}
};
// 创建一个新的 Promise 实例
let p = new Promise(task);
p.then(function() {
console.log('成功'); // 如果任务成功,打印 '成功'
}).catch(function() {
console.log('失败'); // 如果任务失败,打印 '失败'
});
```
3. 解压缩
```js
import fs from 'fs';
import archiver from 'archiver';
import unzipper from 'unzipper';
// 创建输出流,写入压缩文件
const output = fs.createWriteStream('archiver.zip');
const archive = archiver('zip', { zlib: { level: 9 } });
// 将输出流 pipe 到 archiver
output.on('close', function () {
console.log(`${archive.pointer()} total bytes`);
});
// 捕获错误
archive.on('error', function (err) {
console.error('Error during compression:', err);
});
// 将文件添加到压缩包中
archive.file('./20250224--练习讲解以及笔记.md', { name: 'readme.md' }); // 确保这是正确的文件路径
// 完成压缩包
archive.finalize();
// 将 archive 数据流 pipe 到输出流
archive.pipe(output);
```
### Node.js Crypto模块与Web开发笔记
一、Node.js的`crypto`模块
1. 定义:crypto 是 Node.js 的内置模块,用于提供加密功能。
2. 用途:
- 提供哈希(Hash)和消息认证码(HMAC)算法。
- 支持对称加密(如 AES)和非对称加密(如 RSA)。
- 生成和验证数字签名。
- 处理加密相关的底层操作,如密钥生成、证书处理等。
二、Web开发
1. 架构
- CS架构:客户端/服务器模式,客户端需要逐个升级。
- BS架构:浏览器/服务器模式,客户端无需升级,通过浏览器访问。
三、Koa框架
1. 支持ES7的async/await语法。
2.
```js
import Koa from 'koa'
const app = new Koa();
app.use(async function(ctx,next){
await next()
ctx.response.body = '巴拉巴拉啦'
})
app.listen(4000)
// 访问网址 http://localhost:4000
```
3. 中间件机制
- ctx:封装了请求和响应。
- next:用于调用下一个中间件。
4. 依赖管理
```json
{
"name": "hello-koa2",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"dependencies": {
"koa": "2.0.0"
}
}
// 安装命令:npm install
```