# Node
# 1. Node 基础
# 1.1 什么 是 Node.js
Node.js® 是一个基于 Chrome V8 引擎 (opens new window) 的 JavaScript 运行时。
Node.js 特性:
非阻塞 I/O
事件驱动
Node.js 发展史 (opens new window)
与前端的不同
JS 核心语法不变
前端 BOM DOM 后端 fs http buffer event os
# 2. webSocket
example:
const socket = require("socket.io");
const http = require("http");
// 创建服务
const server = http
.createServer((req, res) => {
// 允许所有跨域请求
res.setHeader("Access-Control-Allow-Origin", "*");
req.writeHead(200, {
"Content-Type": "text/html",
});
res.end("");
})
.listen(3000);
let pad = null,
pc = null,
padReady = false,
pcReady = false;
// 连接socket.io
socket.listen(server).on("connection", (conn) => {
conn.on("message", (str) => {
if (str === "Pad") {
pad = conn;
padReady = true;
conn.send("连接成功");
console.log("Pad");
}
if (str === "PC") {
pc = conn;
pcReady = true;
console.log("Pc");
}
if (padReady && pcReady) {
if (str === "PC") str = "我是PC界面";
pc.send(str);
}
});
conn.on("disconnection", (code, reason) => {
console.log("关闭连接");
});
});
参考:
# 3. Node 实现 ZIP 压缩文件
JSZip 工具的使用
下载 JSZip
yarn add jszip
官网实例
// 创建实例
var zip = new JSZip();
// 创建 Hello.txt 并传入数据
zip.file("Hello.txt", "Hello World\n");
// 创建文件夹 images
var img = zip.folder("images");
// 在img文件夹中 创建 smile.gif 并传入数据
img.file("smile.gif", imgData, {
base64: true,
});
// 进行压缩
zip
.generateAsync({
type: "blob",
})
.then(function(content) {
// 将压缩后的内容导入指定文件中
saveAs(content, "example.zip");
});
简单使用
const ZIP = require("jszip");
async function createZIP(data, filename) {
// 初始化 jszip
const zip = new ZIP();
// 读取文件内容
const packageJSON = await readFile(getFilePath("./package.ejs"));
const indexJSTemplate = await readFile(getFilePath("./index.ejs"));
// index.js 模板渲染
const renderData = {
secret: data.secret,
// cmd: "cd C:\\APP\\MyWorkLoad && git pull",
cmd: `cd ${data.file} && ${data.cmd}`,
path: data.url,
port: data.port,
};
const indexJS = ejs.render(indexJSTemplate, renderData);
// 创建文件 并将数据传入文件
zip.file("package.json", packageJSON);
zip.file("index.js", indexJS);
// 进行文件压缩 content即压缩后的数据
const content = await zip.generateAsync({
type: "nodebuffer", // node压缩类型
compressionOptions: {
level: 5, // 压缩级别 1-9级
},
});
// 将压缩文件存储到静态文件中
await fs.writeFile(getFilePath(`../../static/${filename}`), content);
return `${filename}`;
}