node.js aprendizaje 2

Modular

  • No es necesario instalar el módulo integrado, es necesario instalar el módulo externo;
    Inserte la descripción de la imagen aquí
    este archivo es un módulo personalizado

Inserte la descripción de la imagen aquí
require ("./ home"); // Es necesario agregar el mismo directorio de nivel del módulo personalizado ./

El módulo integrado de nombre de archivo del siguiente archivo

Inserte la descripción de la imagen aquí

require ("tt"); // Almacenar en node_modules y ejecutar de acuerdo con las reglas de los módulos incorporados.

administrador de paquetes npm (alias: administrador de módulos)

Comandos comunes de npm:

  • npm init: guía para crear un archivo package.json
  • npm root para ver la ruta de instalación del paquete actual o mediante npm root -g para ver la ruta de instalación global;
  • npm -v ver versión
  • Nodo -v libro de versiones del nodo
  • npm i jquery --save
  • cliente de cookies npm i
  • npm i axios --save-dev
    npm i axios --save-dev Esta es la dependencia de desarrollo


"dependencias" en package.json : {// Ejecuta la dependencia
"jquery": "^ 3.6.0" // npm i jquery --save
},
"devDependencies": {}, // Dependencias de desarrollo

npm install module_name -S o --save significa npm install module_name --save escribe dependencias
npm install module_name -D o --save-dev significa npm install module_name --save-dev escribe devDependencies

módulo fs

  • fs es un módulo de operación de archivos. Todas las operaciones de archivos se dividen en síncronas y asincrónicas. La característica es que la sincronización agregará "Sync", como: archivo de lectura asíncrona "readFile", archivo de lectura síncrona "readFileSync";

Una comprensión preliminar del módulo fs

//fs:操作文件的模块  内置模块
const fs = require("fs");

>  增删改查
1.  文件操作  2.  目录操作

1. Operación de archivos

  • Escribir archivo

writeFile ():
parámetro de archivo de escritura 1: nombre de archivo, incluido el
parámetro de formato de archivo 2: archivo, contenido a escribir

fs.writeFile("1.txt", "我是需要写入的文件", function(err) {
    
    
    if (err) {
    
    
        return console.log(err); //输出报错信息
    }
    console.log("写入成功");
});

Cuando exista el archivo escrito, el contenido del archivo original se sobrescribirá y los parámetros
{flag: "a"} también serán {flag: "a"}
parámetro 3. Objeto de configuración {}: atributo flag: a se agrega para escribir
w: escribir (valor predeterminado)
r: Leer

fs.writeFile("1.txt", "我是追加进来的内容", {
    
     flag: "w" }, function(err) {
    
    
    if (err) {
    
    
        return console.log(err); //输出报错信息
    }
    console.log("写入成功");
});

Archivo leído fs.readFile

冷门方式
fs.readFile("1.txt",(err,data)=>{
    
    
    if(err){
    
    
        return console.log(err);
    }
    console.log(data.toString());
})



fs.readFile():
回调函数中  参数1:错误的信息
"utf-8"
fs.readFile("1.txt", "utf-8", (err, data) => {
    
    
    if (err) {
    
    
        return console.log(err);
    }
    console.log(data);
})
所有的文件操作,默认都有同步和异步;
默认是同步的,需要异步的话,在方法名前加Sync
例如:readFileSync();
 fs.readFileSync("1.txt", "utf-8");
 console.log(data);

// let data = fs.readFileSync("1.xtx").toString();
// console.log(data);

/ Cambiar nombre de archivo: Cambiar nombre
// Parámetro 1: Nombre de archivo original
// Parámetro 2: Nombre de archivo nuevo

 fs.rename("1.txt", "11.txt", err => {
    
    
     if (err) {
    
    
         return console.log(err);
     }
     console.log("修改成功");
 });

Eliminar archivo - fs.unlink ("")

fs.unlink("2.txt", err => {
    
    
    if (err) {
    
    
        return console.log(err);
    }
    console.log("删除成功");
})

Copiar archivos

fs.copyFile();
1.本质是先读取,再写入
fs.copyFile("11.txt", "aa.txt", err => {
    
    
    if (err) {
    
    
        return console.log(err);
    }
    console.log("复制成功");
})

2.封装复制
function myCopyFile(src, dest) {
    
    
    fs.writeFileSync(dest, fs.readFileSync(src));
}
myCopyFile("11.txt", "4.txt");

2: Operación de directorio

No se requiere formato de sufijo al manipular directorios

创建目录
fs.mkdir("ding", err => {
    
    
    if (err) {
    
    
        return console.log(err);
    }
    console.log("创建成功");
})
修改目录名称
fs.rename("ding", "da", err => {
    
    
    if (err) {
    
    
        return console.log(err);
    }
    console.log("修改成功");
})
读取目录
fs.readdir("da", (err, data) => {
    
    
    if (err) {
    
    
        return console.log(err);
    }
    console.log(data);//读出来的是一个数组
})
删除目录(空目录/空文件夹)
fs.rmdir("da", err => {
    
    
    if (err) {
    
    
        return console.log(err);
    }
    console.log("删除成功");
})


判断文件或目录是否存在
fs.exists("5.txt", function(exists) {
    
    
    console.log(exists); //是否找到指定内容  找到就是true找不到就是false
})
//获取文件或目录的详细信息
fs.stat("http.html", (err, data) => {
    
    
    if (err) {
    
    
        return console.log(err);
    }
    console.log(data);

// // ¿Es un archivo
// let res = data.isFile ();
// console.log (res);
// // Es un directorio
// data.isDirectory ();
})

Eliminar directorios que no estén vacíos

Ideas: 1. Primero
elimine los archivos del directorio. 2. Cuando sepa que el directorio está vacío, elimínelo directamente.

function removerDir(path) {
    
    
    //获取目录
    let data = fs.readdirSync(path);
    //["a",2.html","3.txt","4.txt"]
    // console.log(data)

    //总体思路
    for (let i = 0; i < data.length; i++) {
    
    
        //循环判断目录中的每一个内容

        //处理子目录的路径
        let url = path + "/" + data[i];
        /*
         循环1: url =  "22/a"
         循环2:下来就是a文件  然后时a文件下面的所有内容

         */
        //获取详细信息
        let stat = fs.statSync(url);
        console.log(stat.isDirectory());
        if (stat.isDirectory()) {
    
     //如果是目录  继续查找
            removerDir(url);
        } else {
    
     //文件,删除
            fs.unlinkSync(url); //   path  =  22

        }
    }
    //当循环结束后,目录成为空目录
    fs.rmdirSync(path);
}
//注意事项:在使用node.js删除文件时,不会经过回收站
//          在删除前,  切记备份
//          一面删除错误,发生不可挽救的损失
removerDir("22");

Presta especial atención a estos dos lugares
Inserte la descripción de la imagen aquí

El búfer de los datos del búfer también es una clase, no un módulo
  • La forma en que se crea ahora
  • Parámetros: es el tamaño del contenido, en bytes.

dejar buffer = Buffer.alloc (10); console.log (búfer);

  • El búfer convertirá los datos a binarios y luego los mostrará en formato hexadecimal

let buffer = Buffer.from (“大家 好”); console.log (búfer);

let buffer1 = Buffer.from([0xe5, 0xa4, 0xa7, 0xe5, 0xae, 0xb6, 0xe5, 0xa5, 0xbd]);
这里要注意的是上面的参数要以这种0xe5,  才会转换为字符串
console.log(buffer1); <Buffer e5 a4 a7 e5 ae b6 e5 a5 bd>
console.log(buffer1.toString())大家好
let buffer2 = Buffer.from("大家好");
console.log(buffer2)
/字符串创建
//StringDecoder:   固定名称
let {
    
     StringDecoder } = require("string_decoder");

let decoder = new StringDecoder();

let res1 = decoder.write(buffer1);
let res2 = decoder.write(buffer2);
console.log(res1 + res2);

Arroyo

  • Secuencia: la transmisión y el procesamiento de datos son inseparables
//stream   流

const fs = require("fs");
//读取了数据
let rs = fs.createReadStream("11.txt");

//将数据写入
let ws = fs.createReadStream("aa.txt");
//管道
rs.pipe(ws);

console.log(rs);

//流 ,会把数据分成64kb的小文件传输
let num = 0;
let str = "";

//数据传输时,触发的方法
rs.on("data", chunk => {
    
    
        console.log(chunk);
        num++;
        str += chunk;
        console.log(chunk);
        console.log(num)

    })
    //数据传递完成后
rs.on("end", () => {
    
    
    console.log(str)
})

Supongo que te gusta

Origin blog.csdn.net/weixin_54645137/article/details/115110938
Recomendado
Clasificación