关于Node.js

本文详细介绍了Node.js的基础知识,包括其历史、特点、应用场景和安装步骤。重点讲解了Node.js的单线程、非阻塞I/O和事件驱动特性,以及与JavaScript的区别。此外,还深入探讨了文件系统的操作,如读写文件、目录管理,并通过实例演示了如何使用fs模块进行文件操作。文章最后提到了Node.js中的全局变量和路径处理。
摘要由CSDN通过智能技术生成

2.Nodejs初级使用

2.1 Nodejs简介

2.1.1 node简介

Node.js是一个能够在服务器端运行JavaScript的开放源代码、跨平台JavaScript运行环境

Node.js主要用于编写像Web服务器一样的网络应用

官网地址:Node.js

中文官网:Node.js 中文网

2.1.2 什么是node.js

它是一个环境 。比如浏览器可以解析(html、css、js[ecma]),Node就是Ecmascript的环境(它对es6支持非常友好)

2.1.3 为什么学习node.js

浏览器是前端工程师特有的环境,而node它是后端环境。而后端有哪些语言(php、java、python、C#....)

js的脚伸到后端了。比如:java能做的事情我们node也能做。

前端干不了的事情后端来干(比如我们的node)。因为语法不用学了,已经学完了,降低成本。

比如前端干不了以下事情 : 数据库操作、删除文件、动态网站。

通过学习Node.js深刻认识前后端交互,而且后端学习的Vue、React它们环境都依赖Node。

2.1.4 node简史

它是2009年发布-2021年 ,经过这几年发展,Node也已经很成熟了。

2.1.5 Node.js的特点

  • 单线程:

    • 多线程(配置要求高)

    • 单线程:充分利用线程做到极致

       

  • 非阻塞I/O

    • I/O:文件读写操作,指令操作

    • 非阻塞:程序顺利的往下执行

  • 事件驱动

    • 什么时候执行,都是通过事件驱动

2.1.6 Node和JavaScript之间的区别

  • JavaScript:ECMAScript,DOM,BOM,内置对象方法==(前端)==

  • Nodejs:ECMAScript(变量,for,if,switch,数据类型,数据类型,对象方法)== (后端)==

    ==node提供的方法(fs)==

    ==没有DOM与BOM==

2.1.7 Node的应用领域

  • API接口

  • 动态网站开发

  • 即时通信

  • 有一些第三方团队会基于Node开发一些前端工具

2.2 Node安装

  • 下载

    node-v12.16.0-x64.msi (64位)

    node-v12.16.0-x86.msi (32位)

  • 安装

    • 全程下一步,可以改路径,但是路径中不要有中文

    • 查看是否安装成功

2.3 cmd与命令行

2.3.1 cmd

CMD一般指命令提示符。命令就是一条一条的指令 。当用户发出指令那么计算机就要准确根据指令完成某些操作。

  • 特点:提高开发效率,降低内存的使用空间

  • 打开cmd

    • 开始-->搜索cmd-->回车

    • window+r

    • 文件夹目标上输入 -- cmd

2.3.2 常用命令

  • ==cd 目录名称:切换路径== 切换本盘符的路径用cd

  • cd .. : 切换上一级目录

  • dir : 查看目录下的信息

  • md 目录名称:创建目录

  • rd 目录名称:删除目录

  • ==cls/clear : 清屏==

  • 使用技巧

    结合tab键 更好的使用node运行js文件(文件名补全)
    ​
    ↑ ↓ 上下箭头,寻找最近记录

    总结:使用node运行文件,都使用相对路径(也就是说在文件目录打开cmd)

2.4 环境变量

  • 什么是环境变量

    打开文件或者目录的时候,环境变量能够方便开发者更好的赵铎一个程序文件 .exe

    mspaint:画图

    nodepad:记事本

  • 为什么需要配置环境变量

    node -v xxx不是内部命令

    没安装成功 , 环境变量有问题

  • 配置环境变量

    我的电脑-->右击--》属性--》高级系统设置 ---》高级 ---》环境变量---》用户--》path(双击)--》路径复制出来加; ==>加配置软件的路径

    以vscode为例,给大家配置环境变量。

    win10:

    win7:

3.二进制(了解)

3.1 常见进制简述

  • 二进制:0 1

  • 八进制:0-7

  • 十进制:0-9

  • 十六进制:0-9 A-F

    所有数据底层都是二进制(0和1),计算机只认识0和1. 文件的数据读写和网络中的数据传输都是2二进制传递的

3.2 进制转换原理

  • 了解二进制转十进制即可。

    101010 ==> 1*2^5 + 0*2^4 + 1*2^3 + 0*2^2 + 1*2^1 = 42
    067 ==> 6*8^1 + 7*8^0 = 55     以0开头,并且没有超过8的值,就是八进制
    0xff ==> 15*16^0 + 15*16^1 = 255
  • 在线转换器:进制转换 - 在线工具

3.3 计算机存储原理

最小的存储单为是: b(byte) 位

存储文件的最小单位:B 字节

1B = 8b

3.4 ASCII

每一个ascii码值代表了一个具体的字符。底层都会用二进制数表示具体的字符。

英文、数字(62个 ) 加上特殊符号(100): 162等 8个二进制位(也就是一个字节足以表示了)

所以:英文数字特殊符号,只占一个字节 。

但是:世界上有很多国家(中国), utf-8国标码(国际通用的):utf8 一个字符占3个字节

4.文件系统/fs模块

在Nodejs中可以通过内置的fs模块(功能)来操作系统文件。

文件系统操作都具有同步和回调两种方式。所有node中的都90%以上的方法(都有同步和异步两种形式)

==文件夹名不要叫node,文件名称不要叫node.js==

4.1 文件操作流程

文件操作流程:打开文件--->操作文件--->关闭文件 (释放内存)

  • 打开文件

    语法:

    fs.openSync(path[, flags])

    参数说明:

    path:必写参数,是要打开的目标文件名的字符串(可以包含文件所在的具体路径)

    flags:可选参数,设置打开文件的模式(访问模式),常用的模式为只读、写入、追加。

    打开模式表:

    模式说明
    a文件用于追加。 如果文件不存在,则创建该文件
    ax类似于a,但如果路径存在,则失败
    a+打开文件用于读取和追加。 如果文件不存在,则创建该文件
    ax+类似于 'a+',但如果路径存在,则失败
    as打开文件用于追加(在同步模式中)。 如果文件不存在,则创建该文件
    as+打开文件用于读取和追加(在同步模式中)。 如果文件不存在,则创建该文件
    r+打开文件用于读取和写入。 如果文件不存在,则会发生异常
    rs+打开文件用于读取和写入(在同步模式中)。 指示操作系统绕过本地的文件系统缓存
    w打开文件用于写入。 如果文件不存在则创建文件,如果文件存在则截断文件
    wx类似于 'w',但如果路径存在,则失败
  • 写入文件

    fs.writeSync( fd,内容 )
  • 关闭文件

    fs.closeSync(fd)
  • 案例

    //1.载入fs模块
    let fs = require("fs");
    console.log(fs);
    
    //2.打开文件   fs.openSync("文件路径","打开方式")   r:read    w:write    a:append
    let a = fs.openSync("a.txt","w");
    
    
    //3.写文件  fs.writeSync(a,"内容")
    fs.writeSync(a,"下课");
    
    //4.关闭文件
    fs.closeSync(a);

4.2 文件操作

4.2.1 读取文件

  • 作用:readFileSync 读取文件中内容,以二进制数据返回

  • 语法:

    回调风格:fs.readFile( path[,options],callback )
    同步风格:fs.readFileSync( path[,options] )
  • 参数说明:

    • path:必选参数,文件路径

    • options:可选参数 { encoding:'utf8' } | 'utf8',以utf8编码格式读取内容,中括号代表可选参数

    • callback:必选参数,回调函数,返回结果和错误捕获

  • 同步与回调风格

    • 同步的特点:可以用变量接收函数的返回值。node中所有内置函数都以 Sync 结尾

      //1.引入fs模块
      let fs = require("fs");
      
      //2.fs.readFileSync(path[,options])
      let txt = fs.readFileSync("a.txt");
      console.log(txt,typeof txt);  //Buffer  默认返回二进制数据,二进制数据太长,统一用十六进制表示
      
      //.toString();  === 将二进制转换为字符串
      console.log(txt.toString());
      
      
      
      //3.第二个参数  {encoding:"utf-8"}
      let t = fs.readFileSync("a.txt",{encoding:"utf-8"});
      console.log(t);
    • 回调的特点:node中的回调风格的方法,必须传递回调函数,否则报错,然后不以sync结尾 。同时结果必须用回调函数接收。

      //1.载入fs模块
      let fs = require("fs");
      
      //2.读取文件  fs.readFile(path[,options],callback)
      fs.readFile("a.txt",{"encoding":"utf-8"},(err,data)=>{
          console.log(err); //错误信息,如果读取出问题,显示错误信息,没错null
          console.log(data); //结果   读取到的内容
      })
      
      
      
      //3.有错误
      fs.readFile("b.txt",{"encoding":"utf-8"},(err,data)=>{
          console.log(err); //错误信息,如果读取出问题,显示错误信息,没错null
          console.log(data); //结果   读取到的内容
      })

4.2.2 写文件

  • 作用:将内容写入到文件中

  • 语法:

    fs.writeFileSync( path,data[,options] )
    fs.writeFile( path,data[,options],callback)
  • 参数说明:

    • path:必选参数,文件路径

    • data:文件中写入的数据

    • options:可选参数,设置以何种方式写入内容,主要有替换和追加 { flag:'a' }a代表追加append,w代表替换,默认为替换

  • 实例

    //1.引入fs模块
    let fs = require("fs");
    
    //2.写入文件  fs.writeFileSync(path,data[,options])  : 如果当前这个文件没有,会自己创建一个
    //options : {flag:a/w}  a:append:追加   w:write:覆盖  默认
    fs.writeFileSync("b.txt","万丈高楼平地起,辉煌还得靠自己");
    
    //3.追加   \r\n:回车
    fs.writeFileSync("b.txt","\r\n社会很单纯,复杂的是人",{flag:"a"});

4.2.3 文件信息

  • 作用:判断文件或文件夹释放存在,如果不存在报错,还可以判断文件是文件夹还是文件

  • 语法

    fs.statSync( path )
  • 参数说明

    • path:必选参数,文件或文件夹的路径地址

  • 实例

    //1.载入fs模块
    let fs = require("fs");
    
    //2.读取文件信息 fs.statSync(path) : 返回文件信息,如果没有这个文件,会报错
    let message = fs.statSync("b.txt");
    console.log(message.size); //80 文件大小
  • 判断文件类型

    //3.判断文件是文件还是文件夹    
    //isFile();判断是否是文件
    //isDirectory();判断是否是文件夹
    console.log(message.isFile());  //true --- 是文件
    console.log(message.isDirectory()); //false
  • try...catch:同步代码捕获错误

    提前预测错误,如果有错则可设置选择方案,避免因为出错,影响后期代码的运行

    //1.引入fs模块
    let fs = require("fs");
    
    let message;
    try{
        //预测可能会出问题的代码
        message = fs.statSync("c.txt");
    }catch(error){
        //接受到了错误,会执行这里面的代码
        //console.log("错误",error);
        message = fs.statSync("a.txt");
    }
    
    console.log(message);

4.2.4 修改文件名称

  • 作用:重命名也是剪切

  • 语法:

    fs.renameSync( oldpath,newpath )
  • 参数说明:

    • oldpath:必选参数,原文件|文件夹路径

    • newpath:必选参数,新文件|文件夹路径

  • 实例

    //1.引入fs模块
    let fs = require("fs");
    
    //2.修改文件名称:fs.renameSync(oldPath,newPath)
    fs.renameSync("demo/aaaaa.txt","demo/a.txt");  //重命名
    
    fs.renameSync("demo/a.txt","c.txt"); //剪切

4.2.5 删除文件

  • 作用:删除文件

  • 语法:

    fs.unlinkSync( filepath )
  • 参数说明:

    • filepath:必选参数,要删除的文件路径

  • 实例

    //1.引入fs模块
    let fs = require("fs");
    
    //删除文件
    fs.unlinkSync("c.txt");

4.3 文件夹操作

4.1.1 创建目录

  • 语法:

    fs.mkdirSync( path[,options] )
  • 参数说明:

    • path:必选参数,要创建的文件夹完整路径名称

    • options:可选参数,是否递归创建文件夹,{ recursive:true } true代表递归创建

  • 实例

    //1.引入fs模块
    let fs = require("fs");
    
    //2.创建文件夹  fs.mkdirSync(path[,options]) 
    //options : {recursive :false}  默认   true:递归创建
    
    //3.{recursive :false}  默认  一次创建一个文件夹
    // fs.mkdirSync("demo"); 
    
    
    //4.{recursive :false}   true:递归创建
    fs.mkdirSync("demo/aa/bb/cc",{recursive:true}); 

4.1.2 删除目录

  • 语法:

    fs.rmdirSync( path[,options] )
  • 参数说明:

    • path:必选参数,要删除的文件夹完整路径

    • options:可选参数,是否递归删除文件夹,{ recursive:true } true代表递归创建,只有V14版本支持

代码案例:

const fs = require('fs')

fs.rmdirSync('demo1/a')

4.1.3 读取目录

  • 语法:

fs.readdirSync(path)
  • 参数说明:

path:必选参数,要读取的文件夹的完整路径

  • 代码案例:

fs.readdirSync('demo1/a') ["bb"]

4.4 其他

  • 全局变量

    //当前文件所在的绝对路径目录  
    console.log(__dirname); //E:\txf\第三阶段-服务端开发\day04\code
    
    //当前文件所在的绝对路径目录(包括文件名称)
    console.log(__filename); //  E:\txf\第三阶段-服务端开发\day04\code\15 全局变量.js
  • 路径优化

    避免再使用fs操作文件的时候,用相对路径的一些坑,所以fs使用绝对路径

    let fs = require("fs");
    
    
    //获取当前文件的绝对路径
    let path = __dirname + "\\a.txt";
    
    //读文件
    let txt = fs.readFileSync(path,{encoding:"utf-8"});
    console.log(txt); //建议使用绝对路径 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值