Node.js学习笔记

1.Node.js是什么?

  • Node.js是一个开源的、跨平台的Javascript运行环境。
  • 通俗讲,Node.js是一款应用程序、是一个软件,可以运行Javascript。

2.Node.js可以干什么?

  • 开发服务器应用
  • 开发工具类应用
  • 开发桌面端应用

3.下载和安装

4.命令行常用的操作

  • 切换盘符:C: D:
  • 切换工作目录:cd .  cd ..
  • 查看目录文件:dir
  • 装逼:dir /s

5.Node.js注意事项

  • 不能使用DOM相关的api
  • 不能使用BOM相关的api
  • 可以使用console和定时器(setTimeout/setInterval)
  • 可以通过global(旧版)和globalThis(新版)来访问nodejs中的顶级对象(相当于BOM中的window)

6.Buffer

  • 概念:Buffer是一个类似于数组的对象,用于表示固定长度的字节序列;其本质是一段内存空间,专门用来处理二进制数据。
  • 特点:Buffer大小固定且无法调整;Buffer性能较好,可以直接对计算机内存(二进制)进行操作;每个元素的大小为1字节(byte)
  • 创建:
    // 1.Buffer.alloc()
    const buf_1 = Buffer.alloc(10)
    console.log(buf_1);
    
    // 2.Buffer.allocUnsafe()
    const buf_2 = Buffer.allocUnsafe(20)
    console.log(buf_2);
    
    // 3.Buffer.from()
    const buf_3 = Buffer.from([1, 2, 3, 4, 5])
    console.log(buf_3);
    
    // 输出
    <Buffer 00 00 00 00 00 00 00 00 00 00>
    <Buffer 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00>
    <Buffer 01 02 03 04 05>
    

7.fs模块(file system)文件系统

  • 简介:fs模块可以实现与硬盘的交互,例如文件的创建、删除、重命名、移动还有文件内容的读取、写入以及文件夹的相关操作等。
  • 文件写入:

  • writeFile(异步写入)
    // 1.引入fs模块
    // import fs from 'fs'; // 报错
    const fs = require('fs')
    /*
       2.调用writeFile方法 (异步写入)
        - 参数:
            1. 文件路径
            2. 要写入的内容
            3. 配置对象 详情见flags参数:https://www.runoob.com/nodejs/nodejs-fs.html 
            4. 写入完成时的回调 
                参数:err  失败的信息
    */
    const poem = `
        望天门山
    天门中断楚江开,
    碧水东流至此回,
    两岸青山相对出,
    孤帆一片日边来。
    `
    fs.writeFile('./望天门山.txt', poem, (err) => {
        if (err) {
            return console.log(`写入失败,${err}`);
        }
        console.log(`写入成功~`);
    })
    console.log('先打印此句话');
  • writeFileSync(同步写入)
    // 1.引入fs模块
    const fs = require('fs')
    /*
       2.调用writeFileSync方法
        - 参数
            1.文件路径
            2.要写入的内容
            3.配置对象
    */
    const poem = `
      望庐山瀑布
    朝辞白帝彩云间,
    千里江陵一日还,
    两岸猿声蹄不住,
    轻舟已过万重山。
    `
    fs.writeFileSync('./望庐山瀑布.txt', poem)
  • appendFile(异步追加内容)
    // 1.引入fs模块
    const fs = require('fs')
    
    /**
     * 2.调用appendFile方法
     *   - 参数
     *      1. 文件路径 (如果文件路径不存在则是创建, 如果存在就是追加内容)
     *      2. 追加的内容
     *      3. 配置对象
     *      4. 追加完成的回调
     */
    fs.appendFile('./嗨嗨.txt', '测试', err => {
        if (err) {
            return console.log(`追加失败${err}`);
        }
        console.log('追加成功~');
    })
    fs.appendFile('./望庐山瀑布.txt', '\r\n这首诗写的真不错', err => {
        if (err) {
            return console.log(`追加失败${err}`);
        }
        console.log('追加成功~');
    })
  • appendFileSync(同步追加内容)
    // 1.引入fs模块
    const fs = require('fs')
    
    /**
     * 2.调用appendFileSync方法
     *   - 参数
     *      1.文件路径 (存在就是追加,不存在就是创建)
     *      2.追加的内容
     *      3.配置对象
     */
    fs.appendFileSync('./望天门山.txt', '这首诗真不错~')
  • 使用writeFileSync追加内容

    // 1.引入fs模块
    const fs = require('fs')
    
    // 2.调用writeFileSync方法 参数跟之前一样 这次要传入配置对象 
    // 详情见flags参数:https://www.runoob.com/nodejs/nodejs-fs.html 
    fs.writeFileSync('./嗨嗨.txt', '\r\n测试二', { flag: 'a' })
  • stream(流式写入)

    // 1.引入fs模块
    const fs = require('fs')
    
    /**
     * 2.创建通道,调用createWriteStream方法
     *    参数: 文件路径
     */
    
    const ws = fs.createWriteStream('流式写入.txt')
    
    // 3.写入内容
    ws.write('我是流式写入的第一段内容,')
    ws.write('\r\n我是流式写入的第二段内容,')
    ws.write('\r\n我是流式写入的第三段内容,')
    
    // 4.关闭通道
    ws.close()
  • 文件写入的场景

    /*
        文件写入在计算机中是一种非常常见的操作,下面的场景都用到了文件写入
        
        1. 下载软件
        2. 安装软件
        3. 保存程序日志, 如git
        4. 编辑器保存文件
        5. 视频录制
        
        当需要持久化保存数据的时候, 应该想到文件写入
    */
  • 文件读取

  • readFile(异步读取)

    // 1.引入fs模块
    const fs = require('fs')
    
    /**
     * 2.调用readFile方法
     *   - 参数
     *      1.文件路径
     *      2.读取完成的回调
     *          参数一:err  读取失败的信息
     *          参数二:data 读取成功的内容 返回的是一个Buffer 需调用toString()方法将其转换为utf-8的字符集
     * 
     */
    
    fs.readFile('./望天门山.txt', (err, data) => {
        if (err) {
            return console.log(`读取失败~${err}`);
        }
        console.log('读取成功~', data);
        // console.log(`读取成功~${data}`); 放在模板字符串中会隐式的调用其toString()方法
        console.log(data.toString());
    })
  • readFileSync(同步读取)

    // 1.引入fs模块
    const fs = require('fs')
    
    /**
     * 2.调用readFileSync方法
     *   - 参数:
     *      1. 文件路径
     *      2. 配置对象
     * 
     * 
     */
    const data = fs.readFileSync('./望天门山.txt')
    console.log(data); // 返回值是一个Buffer 
    console.log(data.toString()); // 调用toString方法将其转换为utf-8的字符集
  • stream(流式读取)

    // 1.引入fs模块
    const fs = require('fs')
    
    // 2.创建通道
    // 这个文件太小 不足以演示
    // const rs = fs.createReadStream('./望天门山.txt')
    const rs = fs.createReadStream('./测试.mp4')
    
    
    
    // 3.绑定data事件
    rs.on('data', chunk => {
        // console.log(chunk);
        console.log(chunk.length);
        // console.log(chunk.toString());
    })
    
    // 4.读取完成关闭通道
    rs.on('end', () => {
        console.log('读取完成~');
    })

    文件读取应用场景

  • /*
    
        读取文件应用场景
        
        1.电脑开机
        2.程序运行
        3.编辑器打开文件
        4.查看图片
        5.播放视频
        6.播放音乐
        7.git log 查看git日志
        8.上传文件
        9.查看聊天记录
        ...
    
    */
  • 文件复制 (先读后写)

    // 方式一 使用readFile和writeFile (先读后写)
    // 引入fs
    const fs = require('fs')
    // 读取
    const data = fs.readFileSync('./测试.mp4')
    // 写入
    fs.writeFileSync('./测试2.mp4', data)
    
    // 方式二 通过流式读取和流式写入
    // 读取
    const rs = fs.createReadStream('./测试.mp4')
    // 写入
    const ws = fs.createWriteStream('./测试3.mp4')
    
    rs.on('data', chunk => {
        ws.write(chunk)
    })
  • 文件重命名与移动(rename)

    // 1.引入fs模块
    const fs = require('fs')
    
    /**
     * 2.调用rename方法
     *   - 参数
     *      1.需要重命名的文件路径
     *      2.重命名后的文件路径 (同一目录就是重命名,不同目录就是移动)
     *      3.重命名或移动完成时的回调
     */
    // 重命名
    fs.rename('./魁拔之书.txt', './魁拔之书_青青树.txt', err => {
        if (err) {
            return console.log('操作失败~', err);
        }
        console.log('操作成功~');
    })
    
    // 移动
    fs.rename('./魁拔之书_青青树.txt', '../魁拔之书.txt', err => {
        if (err) {
            return console.log('操作失败~', err);
        }
        console.log('操作成功~');
    })
    // 3.rename还有同步方法就是renameSync用法和之前读取写入一样
  • 删除文件unlink 和 rm

    // 方式一 unlink方法
    // 1.引入fs模块
    const fs = require('fs')
    
    /**
     * 2.调用unlink方法
     *   - 参数:
     *      1.要删除的文件路径
     *      2.删除完成时的回调
     */
    fs.unlink('./哇咔咔.txt', err => {
        if (err) {
            return console.log('删除失败~', err);
        }
        console.log('删除成功~');
    })
    
    // 方式二 调用rm方法 用法跟unlink一样
    fs.rm('./哇哈哈.txt', err => {
        if (err) {
            return console.log('删除失败~', err);
        }
        console.log('删除成功~');
    })
    
    // unlink 和 rm都有自己对应的同步方法 unlinkSync 和 rmSync 用法跟之前的一样
  • 创建文件夹mkdir 和 mkdirSync

    // 1.引入fs模块
    const fs = require('fs')
    
    /** 
     *  2.调用mkdir方法
     *    - 参数
     *          1.文件路径
     *          2.配置对象
     *          3.创建完成的回调
     * 
     * */
    
    fs.mkdir('./html', err => {
        if (err) {
            return console.log('创建失败', err);
        }
        console.log('创建成功~')
    })
    
    // 创建多层级文件夹 (是否递归创建)
    fs.mkdirSync('./a/b/c', { recursive: true })
  • 读取文件夹readdir 和 readdirSync

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值