node笔记

path

path.basename() 返回给定路径的最后一部分

path.basename('C:\temp\myfile.html')
// 返回myfile.html

path.dirname() 返回除最后一个路径的其他路径 与 basename 互补

path.extname 返回拓展名

path.extname('C:\temp\myfile.html')
// 返回.html

path.join 拼接路径

path.join('/fool','/cks','/ccc')
// 返回 /fool/cks/ccc

可以支持 … ./ …/操作符

path.join('/foo','/cxk','/ikun','../')
// /foo/cxk/

path.resolve 用于将相对路径解析并返回绝对路径

// 1 传入多个绝对路径 返回最右侧的
path.resolve('/aaa','/bbb','/ccc')
// /ccc

// 2 传入绝对路径 + 相对路径
path.resolve(__dirname,'./readme.md')
//  /User/xiaoman/DeskTop/node/readme.md

// 3 只传入相对路径
path.resolve('./readme.md')
// 返回 工作目录 + readme.md

path.parse 与 path.format (互补)

parse

用于解析文件路径。它接受一个路径字符串作为输入,并返回一个包含路径各个组成部分的对象

path.parse('/home/user/dir/file.txt')

{
  root: '/',
  dir: '/home/user/dir',
  base: 'file.txt',
  ext: '.txt',
  name: 'file'
}
root:路径的根目录,即 /。
dir:文件所在的目录,即 /home/user/documents。
base:文件名,即 file.txt。
ext:文件扩展名,即 .txt。
name:文件名去除扩展名,即 file。

format 正好相反 在把对象转回字符串

path.format({
    root: '/',
    dir: '/home/user/documents',
    base: 'file.txt',
    ext: '.txt',
    name: 'file'
 })
 // /home/user/dir/file.txt

os

os 模块可以与操作系统进行交互

var os = require('node:os')

fs 文件系统模块(核心 api)

<!-- 读文件 -->
fs2.readFile("./readme.md").then(function (res) {
  console.log(res);
});
fs.readFile("./readme.md", (err, data) => {
  if (err) return err;
  console.log(data.toString());
});
const text = fs.readFileSync("./readme.md");
console.log(text.toString());

<!-- 追加内容 -->
fs.writeFileSync("./readme.md", "java之父\n余胜军", {
  flag: "a",
});
fs.appendFileSync('./readme.md','\n咚咚咚')

<!-- 创建可写流 大数据书写文件 -->
const verse = [
    '待到秋来九月八',
    '我花开后百花杀',
    '冲天香阵透长安',
    '满城尽带黄金甲',
]
const writeStream = fs.createWriteStream('index.txt')
verse.map(item=>{
    writeStream.write(item + '\n')
})
writeStream.end()
writeStream.on('finish',()=>{
    console.log('写入完成')
})

crypto 密码学

对称加密

// 生成一个随机的 16 字节的初始化向量 (IV)
const iv = Buffer.from(crypto.randomBytes(16));
console.log(iv); // <Buffer 08 9e 87 76 52 c1 24 e9 2b 80 4c f6 da 1c ed 5d>

// 生成 随机32字节的密匙
const key = crypto.randomBytes(32);
console.log(key);

// 创建加密实例 使用 AES-256-CBC算法 提供密钥和初始化向量
const cipher = crypto.createCipheriv("aes-256-cbc", key, iv);

// 对输入数据进行加密
cipher.update("xiaojj", "utf-8", "hex");
const result = cipher.final("hex");
console.log(result);

// 解密
const de = crypto.createDecipheriv("aes-256-cbc", key, iv);
de.update(result, "hex");
const decrypted = de.final("utf-8");

console.log(decrypted);

非对称加密


// 生成RSA密钥对
const { privateKey, publicKey } = crypto.generateKeyPairSync("rsa", {
  modulusLength: 2048,
});

// 要加密的数据
const tetx = "春眠不觉晓,处处闻啼鸟,夜来风雨声,花落知多少";

// 使用公钥加密
const encrypted = crypto.publicEncrypt(publicKey, Buffer.from(tetx, "utf-8"));

// 使用私钥解密
const decrypted = crypto.privateDecrypt(privateKey, encrypted);

console.log(decrypted.toString(), encrypted);

哈希函数

// 要计算哈希的数据
let text = "鹅鹅鹅";
// 创建哈希对象 使用md5算法
const hash = crypto.createHash("md5");
// 更新哈希对象的数据
hash.update(text);
// 计算哈希值,并以16进制字符串形式输出
const hashValue = hash.digest("hex");

console.log("Text", text);
console.log("Hash", hashValue);

连表 and 子查询


-- Active: 1730363543284@@127.0.0.1@3306@xiaoman
SELECT *
FROM `photo`
WHERE
    `user_id` = (
        SELECT id
        FROM `user`
        WHERE
            name = 'whh'
    );
-- 内连接
SELECT * FROM `user`, `photo` WHERE `user`.`id` = `photo`.`user_id`;
-- 外连接 - 左连接
SELECT *
FROM `user`
    LEFT JOIN `table` ON `user`.`id` = `table`.`user_id`;
-- 外连接 - 右连接
SELECT * FROM `user` RIGHT JOIN `table` ON `user`.`id` = `table`.user_id;

posted @ 2024-12-09 17:54  进击的娃哈哈  阅读(2)  评论(0编辑  收藏  举报