当前位置:   article > 正文

Node.js教程(想入门就来点进来看看)_nodejs教程

nodejs教程

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

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

官网地址:Node.js

中文官网:Node.js 中文网


前言

Node对前端的工程师来说还算是友好的,转Node.js也是相对较容易接受

如果你是一个前端程序员,你不懂得像 PHP、Python 或 Ruby 等动态编程语言,然后你想创建自己的服务,那么 Node.js 是一个非常好的选择。

Node.js 是运行在服务端的 JavaScript,如果你熟悉 Javascript,那么你将会很容易的学会 Node.js。

当然,如果你是后端程序员,想部署一些高性能的服务,那么学习 Node.js 也是一个非常好的选择。


相信你应该了解一些基本的计算机编程术语。如果你学习过 Javascript、PHP、Java 等编程语言,将有助于你更快的了解 Node.js 编程。

一、为什么要学习Node.js?

● 学习Node.js是为了解前后端交互流程

● 同时为后面学习前端框架做准备

● 前端有很多业务不能解决,需要使用Node.js处理

1.1 node的特点

  • 单线程
  • 非阻塞I/O
  • 事件驱动 event-driven

1.2 node.js适合开发什么? 

  • 用户表单收集
  • 考试系统
  • 聊天室
  • 图文直播
  • 提供JSON的API

二、正文 

2.1 node下载与安装

下载地址:Download | Node.js

下载成功后:

windows键+R 打开终端 输入 node -v   如果得到 Vxx.xx.xx的版本号证明安装成功

2.2常见cmd操作

  1. dir–显示指定路径上所有文件或目录的信息
  2. md(mkdir)–建立目录
  3. rd(rmdir)–删除目录
  4. cd–进入指定目录
  5. copy–拷贝文件
  6. del–删除文件
  7. ren(rename)–改名。
  8. type–显示文本文件
  9. discopy–磁盘复制
  10. deltree–删除目录树
  11. mem–查看你的计算机内存有多少,以及内存的使用情况。
  12. chkdsk–检查你的磁盘的使用情况。
  13. 用法: chkdsk 磁盘名
  14. cls–清除显示器屏幕上的内容,使DOS提示符到屏幕左上角。
  15. time–显示和设置DOS的系统时间
  16. date–显示和设置DOS的系统日期
  17. EXIT(exit-退出 CMD.EXE 程序(命令解释程序)。
  18. ver–显示正在运行的DOS系统版本号
  19. break -设置或清除扩展式 CTRL+C 检查。
  20. cacls -显示或修改文件的访问控制列表(ACL)。
  21. call -从另一个批处理程序调用这一个。
  22. chcp-显示或设置活动代码页数。
  23. chdir-显示当前目录的名称或将其更改。
  24. chkdsk-检查磁盘并显示状态报告。
  25. cmd- 打开另一个 Windows 命令解释程序窗口。
  26. color -设置默认控制台前景和背景颜色。
  27. comp-比较两个或两套文件的内容。
  28. copy-将至少一个文件复制到另一个位置。
  29. diskpart-显示或配置磁盘分区属性。
  30. doskey -编辑命令行、撤回 Windows 命令并创建宏。
  31. drase -删除一个或多个文件。
  32. FC -比较两个文件或两个文件集并显示  它们之间的不同。 
  33. fidn-在一个或多个文件中搜索一个文本字符串。
  • 以上是整理的部分可能用得到的指令代码

三、node运行与顶层对象

1.Node的运行

在cmd工具中,使用命令

node 文件名

代码示例:

console.log("hello world")

2.顶层对象

在浏览器 JavaScript 中,通常 window是顶层对象,而 Node.js 中的顶层对象是 global

globalThis

代码示例:

  1. console.log(this);//{}
  2. console.log(global);
  3. console.log(globalThis);//顶级对象

3.全局变量

Node平台内置了例如:__filename __dirname等全局变量 setInterval() setTimeout()等方法

代码示例:

  1. //绝对路径
  2. console.log(__dirname);//盘符:\文件夹名称
  3. console.log(__filename);//盘符:\文件夹名称\文件名

两者的区别:后者地址详细到当前文件 

四、Buffer

Buffer类是随Node.js内核一起发布的核心库

Buffer的结构和数组很像、但Buffer就是专门用来存储二进制数据

1.常见进制简述

二进制、八进制、十进制、十六进制...

  1. 二进制:0-1
  2. 八进制:0-7
  3. 十进制:0-9
  4. 十六进制:0-9 A-F
  5. 进制之间的转换:
  6. 1、十进制转二进制
  7. 1)十进制转二进制的转换原理:除以2,反向取余数,直到商为0终止。
  8. 2)具体做法:
  9. 将某个十进制数除2得到的整数部分保留,作为第二次除2时的被除数,得到的余数依次记下,重复上述步骤,直到整数部分为0就结束,将所有得到的余数最终逆序输出,则为该十进制对应的二进制数。
  10. 2、十进制转八进制
  11. 1)转换原理:除以8,反向取余数,直到商为0终止。
  12. 2)具体步骤与二进制一样
  13. 3、十进制转十六进制
  14. 1)转换原理:除以16,反向取余数,直到商为0终止。
  15. 2)具体步骤也和二进制、八进制一样,重复上述做法即可得到十六进制数。
  16. 4、 二进制、八进制、十六进制转换为十进制
  17. 1) 当位数上的值超过1就要进1
  18. (2)当位数上的值超过7就要进1
  19. (3)当数位上的值超过15就要进10 1 2 3 4 5 6 7 8 9 A B C D E F)
  20. 15对应的则是F,则上面可以理解为比F还大1就进1

简单进制转换图:

2.Buffer的常见操作

2.1基本使用

代码案例:

  1. let str="hello";
  2. // // let str='z'
  3. // let s=Buffer.from(str)
  4. // console.log(s);
  5. // console.log(s.toString());

2.2常见方法

  • from 读取

  • concat 合并缓存区

  • toString() 转换为字符串

代码案例:

  1. let str1='hello';
  2. let str2="world";
  3. let b1=Buffer.from(str1)
  4. let b2=Buffer.from(str2)
  5. let b=Buffer.concat([b1,b2]);//将多个buffer合并为一个新的buffer
  6. // console.log(b1);
  7. // console.log(b2);
  8. console.log(b);
  9. console.log(b.toString());

五、模块系统

在Node.js中,一个js文件就称之为一个模块(Module)。

1.模块概述

  • Node.js 的模块系统是其核心功能之一,它提供了一种方便、模块化和可重用的代码组织方式。 通过导入和导出模块,我们可以将相关功能的代码封装在一起,提高代码的可维护性和复用性。 同时,Node.js 的模块系统还具有查找规则、缓存和解决循环依赖等特性
  • 简而之就是i将一个大程序拆分成互相依赖的小文件,再用简单的方法拼装起来

2.模块的分类

在Node中,模块分为两类:一类是Node提供的模块,称为核心模块;另一类是用户编写的模块,称为文件模块(自定义模块、第三方模块)。

2.1 内置模块/核心模块

例如:url querystring fs ...

代码示例:

  1. //内置模块 NodeJS中自带的模块,可以直接使用
  2. /*
  3. require("模块名")
  4. fs/url/querystring/qs/path/http....
  5. */
  6. //url模块 处理url
  7. let myUrl="http://192.168.1.1:3000/admin/login?username=jack&pwd=2342#main";
  8. //协议
  9. //主机名
  10. //端口
  11. //路径
  12. //参数
  13. // const url=require("url");
  14. // // console.log(url);
  15. // let newUrl=url.parse(myUrl)
  16. // // console.log(newUrl);
  17. // let {host,port,protocol,query,pathname} =newUrl;
  18. // console.log(protocol);//协议
  19. // console.log(pathname);
  20. // console.log(port);
  21. // console.log(host);
  22. // console.log(query);
  23. // let mmUrl=new URL(myUrl)
  24. // console.log(mmUrl);
  25. const qs=require('querystring');
  26. // console.log(qs);
  27. let str="username=jack&pwd=2342";// --> 对象格式
  28. let rst=qs.parse(str)
  29. // console.log(rst);
  30. let queryObj={
  31. id:1,
  32. username:"admin",
  33. pwd:1123234
  34. }
  35. let ss=qs.stringify(queryObj)
  36. console.log(ss);

2.2 文件模块

文件模块常见的有:自定义模块、第三方模块

自定义模块:

代码示例:

  1. let fn = function () {
  2. console.log('hello world');
  3. }
  4. let fnx = function () {
  5. console.log('running........');
  6. }
  7. let arr = ['hello', 'yes', 'hi'];
  8. let obj = {
  9. no: "1002",
  10. title: "鞋子",
  11. price: 119
  12. }
  13. //批量导出
  14. module.exports = {
  15. fn: fn, fnx, arr, obj
  16. }
2.2.1 ES6的模块化 (ESM)

使用export和import

  • 单个导出

    • export.名称=值

  • 批量导出

    • export { 值,....}

  • 默认导出

    • export default {}

示例:

  1. //单个导出
  2. let obj={
  3. id:166,
  4. name:"于晏",
  5. age:18
  6. }
  7. export let age=20;
  8. export let name="富城"
  9. export let addr="相遇在街头"
  1. //批量导出
  2. import {age} from "./person.js"
  3. export let fn=function(){
  4. console.log('hello world');
  5. }
  6. let fx=function(){
  7. console.log('this...');
  8. }
  9. let obj={
  10. id:111,
  11. msg:"ok"
  12. }
  13. export {
  14. fx,obj
  15. }
  1. //默认导出
  2. // export default {
  3. // id: 1,
  4. // msg: 'ok',
  5. // fn: function () {
  6. // console.log('哈哈哈');
  7. // },
  8. // fnx() {
  9. // console.log("hello world");
  10. // }
  11. // }
  12. let a = 10;
  13. let b = 'hello world';
  14. let fn = function () {
  15. console.log('run.........');
  16. }
  17. let arr = [10, 20, 304, 890]
  18. export default {
  19. ax: a,
  20. b: b,
  21. fn: fn,
  22. arr: arr
  23. }
  24. // export default {
  25. // a,b,fn,arr
  26. // }
  27. //注意:一个模块只能有一个默认导出
  28. // export default {
  29. // name:"李四"
  30. // }
  1. // console.log(obj);//不能直接访问其它模块的内容
  2. //导入其它模块的内容
  3. //1.导入单个导出
  4. import { age } from "./person.js";
  5. // import {age} from "./person";//error 需要完整的后缀
  6. //2.导入批量导出的内容
  7. import { m1 as mm, m2 } from "./strudent.js"
  8. //3.
  9. import {fn,fx,obj} from "./emplyee.js";
  10. //4.导入默认导出的模块
  11. import xx from "./man.js"
  12. // console.log(age);
  13. // console.log(obj);//error person.js没有导出obj
  14. // console.log(m1);
  15. // console.log(m2);
  16. // fn()
  17. // fx();
  18. // console.log(obj);
  19. console.log(mm);
  20. // console.log(m1);//已改名,不可以使用
  21. // console.log(xx);
  22. // console.log(xx.id);
  23. // console.log(xx.msg);
  24. // xx.fn()
  25. //入口文件

2.2.2 CommonJS的模块化 (CJS)

使用exports、module.exports 和require

示例:

  1. //单个导出
  2. let name='于晏';
  3. let age=20;
  4. let addr="阳光大道";
  5. exports.name = '于晏';
  6. exports.age = 20;
  7. exports.addr = "阳光大道";
  8. let arr=[10,101,1001];

  1. //批量导出
  2. let fn = function () {
  3. console.log('hello world');
  4. }
  5. let fnx = function () {
  6. console.log('running........');
  7. }
  8. let arr = ['hello', 'word', 'hi'];
  9. let obj = {
  10. no: "0001",
  11. title: "鞋子",
  12. price: 999
  13. }
  14. module.exports = {
  15. fn: fn, fnx, arr, obj
  16. }
  1. //入口文件
  2. //导入
  3. // const xx=require("./user.js");// { name: '张三', age: 20, addr: '中州大道' }
  4. // console.log(xx);
  5. // const { age, addr } = require("./user.js");
  6. // const { age, addr ,arr} = require("./user");//可以省略后缀
  7. // // console.log(age, addr);
  8. // console.log(arr);//undefined
  9. // const rst=require("./student");
  10. // console.log(rst);
  11. // console.log(rst.xx.arr);
  12. // let rst=require("./room")
  13. // console.log(rst);
  14. // let {obj,arr} =require("./room");
  15. // console.log(obj,arr);
  16. const xx=require("./classroom");
  17. console.log(xx);
2.3 模块加载机制和Commonjs简述
  • 加载核心模块,如:fs、path等,其实在node运行的时候,已经放到内存中了

  • 加上对应文件后缀,优先级为:test.js > test.json > test.node

  • 搜索路径,如果有指定路径则按照路径去找,如:require(‘./test’) 则在当前目录寻找,如果没有指定路径,则从当前目录下往上去找 node_modules文件夹,然后从文件夹里去遍历寻找对应模块名,如果找不到则到上一层node_modules去找,直到最顶层目录

  • 首次会加载比较慢,后面node.js 会将缓存相关信息到内存避免二次查询

加载机制:

核心模块:系统会优先加载核心模块
自定义模块:使用时,使用相对路径(./  ../)
第三方模块:若出现了和核心同名的模块,优先加载核心模块;没有同名,会自动检索node_modules目录
    js--->json-->其它文件
    
    
总结:尽量避免同名

2.4 新特性

在node的新版本中,支持使用[node:module API] 即可以使用node:前缀来标识核心模块。 

这种方式导入包,它会绕过所需的缓存。

区别:

  • 直接使用require('fs'),需要等node.js将所有核心模块加载完成后才可以使用,这个可以通过module.builtinModules去判断是否加载完成

  • 使用require('node:fs'),则不需要等待,可以直接调用内置模块,但是却无法使用缓存

    1. // console.log(fs);
    2. // const fs=require('fs')
    3. // console.log(fs);
    4. // const fs=require("node:fs");//加载核心模块 fs
    5. // console.log(fs);
    6. const url=require("node:url")
    7. console.log(url);
    8. const qs=require("node:querystring")

总结:如果是对启动速度有要求的功能,建议使用require('node:fs')模式,其他正常调用即可

六、包和npm

1.包的概念:

在Nodejs中包由由包结构和包描述文件两个部分组成.

包结构:用于组织包中的各种文件,例如:源代码文件、资源文件

包描述文件:描述包的相关信息,例如:package.json、bin、lib等文件

2.npm

npm是随着Nodejs一起安装的一个包管理工具,它具有以下用途:

  • 允许用户从NPM服务器下载别人编写的第三方包到本地使用。

  • 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。

  • 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。

3.npm常见命令

示例:

  1. 1.
  2. nodejs中包有两部分组成:包文件和包的描述信息(配置文件、json文件等...)
  3. 2.NPM node package manger node包管理器
  4. (1)允许通过NPMNPM市场下载包
  5. (2)允许通过npm将自己开发的包上传到NPM市场
  6. (3)允许通过npm上传和下载命令
  7. 3.安装
  8. 4.常见的命令
  9. 1)npm init 初始化代码工程(会在根目录下生成一个package.json的文件)
  10. 其它用法:
  11. npm init -y
  12. 2)npm install 安装 安装命令执行之后,会在项目的根目录下产生有一个node_modules的目录(以后所有下载的包都会安装到该目录)
  13. 简化为:npm i
  14. 本地安装:将包安装到项目中
  15. 安装到项目/生产依赖:
  16. npm install 包名 新版nodejs的写法
  17. npm install 包名 --save 旧版写法
  18. 简化为:
  19. npm install 包名 -S npm i 包名 -S
  20. 安装到开发依赖
  21. npm install 包名 --save-dev
  22. 简化为:
  23. npm install 包名 -D npm i 包名 -D
  24. 注意:修饰符可以在前、在后
  25. npm i 包名 -D
  26. npm i -D 包名
  27. 全局安装:将包安装到计算机上(默认C盘)
  28. npm i 包名 -g
  29. 区别:
  30. 生产依赖:包不仅在开发阶段要使用,在生产阶段也要使用
  31. 开发依赖:只在开发阶段使用
  32. 本地安装和全局安装:
  33. 本地安装:适用于绝大多数项目开发包
  34. 全局安装:一般用于安装命令类型包
  35. 例子:全局安装cnpm
  36. npm install cnpm -g
  37. 换源:
  38. npm config set registry https://registry.npmmirror.com
  39. 其它:一次性安装多个包
  40. npm i 包 包 包
  41. (3)批量安装 (项目中有package.json文件)
  42. npm install
  43. (4)安装指定的版本
  44. 默认安装最新版的包
  45. 安装指定版本: npm install 包名@版本号
  46. 查询npm服务器存在的包版本信息
  47. npm view 包名 versions 查看所有版本号
  48. npm view 包名 version 查看当前版本号
  49. 卸载
  50. npm uninstal 包名
  51. 删除
  52. npm rm 包名
  53. 其它:
  54. npm config get registry
  55. npm config set registry 地址

4.package.json文件详解

代码示例:

  1. {
  2. "name": "node_demo2", 包名
  3. "version": "1.0.0", 版本号
  4. "description": "", 项目描述信息
  5. "main": "index.js", 入口文件
  6. "scripts": { 命令
  7. "test": "echo \"Error: no test specified\" && exit 1"
  8. },
  9. "keywords": [], 关键字
  10. "author": "", 作者
  11. "license": "ISC", 许可协议
  12. "dependencies": { 生产依赖
  13. "cookie-parser": "^1.4.6",
  14. "jquery": "^3.7.0"
  15. },
  16. "devDependencies": { 开发依赖
  17. "express-session": "^1.17.3",
  18. "less": "^4.2.0"
  19. }
  20. }

5.淘宝镜像

(1)全局安装cnpm工具( 我们npm工具如何使用的,cnpm一模一样 )

 npm install -g cnpm --registry=https://registry.npm.taobao.org

(2)配置npm命令的源:

npm config set registry https://registry.npm.taobao.org

(3) 查看当前npm的源

npm config get registry (查询当前的源,如果进行上面的配置后则会得到 https://registry.npm.taobao.org)

七、事件订阅机制

大多数 Node.js 核心 API 都是使用异步事件驱动架构,所以我们了解Nodejs的事件机制是很有必要的。

1.events模块

nodejs内置的模块

代码案例:

  1. require("node:events")
  2. require("events")
  3. // const e=require("node:events")
  4. // const emitter= e.EventEmitter;
  5. const { EventEmitter } = require("node:events");
  6. const emitter = new EventEmitter();//事件对象

2.常用方法

  • on()

  • off()

  • once()

  • emit() 触发事件

  • addListener()

  • removeListener()

  • removeAllListener(0)

代码案例:

  1. // const e=require("node:events")
  2. // const emitter= e.EventEmitter;
  3. const { EventEmitter } = require("node:events");
  4. const emitter = new EventEmitter();//事件对象
  5. //注册了一个事件
  6. // emitter.on("xx",function(a,b,c,d,e,f){
  7. // console.log('xx事件运行了...');
  8. // console.log(a,b,c,d,e,f);
  9. // // })
  10. // emitter.on("xx", function (...a) {
  11. // console.log('xx事件运行了...');
  12. // console.log(a);
  13. // })
  14. // emitter.on("click", function () {
  15. // console.log('我被click了');
  16. // })
  17. // //注册一次性事件
  18. // emitter.once('yy', function () {
  19. // console.log('一次性事件执行成功');
  20. // })
  21. // //解绑事件
  22. // emitter.off('xx', function (...a) {
  23. // console.log('xx事件运行了...');
  24. // console.log(a);
  25. // })
  26. // let fn1 = function (...a) {
  27. // console.log('xx事件运行了...');
  28. // console.log(a);
  29. // };
  30. // let fn2 = function (...a) {
  31. // console.log('xx事件运行了...');
  32. // console.log(a);
  33. // };
  34. // emitter.on('xx',fn1)
  35. // // emitter.off('xx',fn2)
  36. // emitter.off('xx',fn1)
  37. // emitter.emit("xx", 10, 20, 30, 40, 50)
  38. // emitter.emit("xx", 10, 20, 30, 40, 50)
  39. // emitter.emit('click')
  40. // emitter.emit('click')
  41. // emitter.emit('yy')
  42. // emitter.emit('yy')
  43. // emitter.emit('yy')
  44. // console.log([]==[]);
  45. // console.log(emitter);
  46. // console.log(EventEmitter);
  47. emitter.addListener("mouseover",function(){
  48. console.log('鼠标来了....');
  49. })
  50. emitter.addListener("xx",function(){
  51. console.log('鼠标来了....');
  52. })
  53. emitter.addListener("yyy",function(){
  54. console.log('鼠标来了....');
  55. })
  56. // emitter.removeListener()//删除
  57. emitter.removeAllListeners();//删除所有
  58. emitter.emit("mouseover")

八、文件系统

Nodejs内置了用于操作文件的模块:fs

示例:

  1. require('fs')
  2. require("node:fs")

常见的操作有文件操作、文件夹操作。

提供了两种操作方案:同步、异步

8.1文件的操作流程

  • 打开文件 open() openSync()

  • 写入内容 write() writeSync()

  • 关闭文件 close() closeSync()

示例:

  1. // const fs=require('fs');
  2. const fs = require("node:fs");
  3. // console.log(fs);
  4. //打开文件
  5. // fs.open("./dta.txt","a", function (err, fd) {
  6. // if (err) {
  7. // console.log('打开失败:', err);
  8. // return;
  9. // }
  10. // console.log('打开成功:',fd);
  11. // // let buf=Buffer.from("hello world");
  12. // fs.write(fd, "hello world", function (err) {
  13. // if (err) {
  14. // console.log("写入失败:", err);
  15. // return
  16. // }
  17. // console.log("写入成功");
  18. // fs.close(fd,function(err){
  19. // if(err){
  20. // console.log('关闭失败:');
  21. // return
  22. // }
  23. // console.log('关闭成功');
  24. // })
  25. // })
  26. // })
  27. //同步
  28. try {
  29. let fd = fs.openSync("./data.txt", "w")
  30. fs.writeSync(5, "Hello,同步方式");
  31. fs.closeSync(fd);
  32. } catch (e) {
  33. console.log("发生异常,请稍后重试");
  34. }
  35. // let fd=fs.openSync("./data.txt","w");
  36. // // let fd=fs.openSync(`${__dirname}/data.txt`);
  37. // fs.writeSync(fd,"hello")
  38. // fs.close();

8.2文件操作

常见的方法:

  • readFile()

  • writeFile()

  • rename()

  • unlink()

注意:每个方法都有对应的同步方法

示例:

  1. /*
  2. readFile() 读取
  3. writeFile() 写入
  4. rename() 重命名/剪切
  5. unlink() 删除文件
  6. */
  7. const fs=require('fs');
  8. //注意:若文件不存在,则会先创建文件,再写入(不会创建文件夹)
  9. fs.writeFile("./info/info.txt","我好",err=>{
  10. if(err){
  11. console.log('写入失败:',err);
  12. return;
  13. }
  14. console.log("写入成功");
  15. })
  16. // fs.writeFile("./data.txt","写入的内容",{flag:"a"},err=>{
  17. // if(err){
  18. // console.log('写入失败:',err);
  19. // return;
  20. // }
  21. // console.log("写入成功");
  22. // })
  23. // fs.writeFileSync("./data.txt","hello jack",{flag:"a"})
  24. //剪切
  25. // fs.rename("./msg.txt","../data.txt",err=>{
  26. // if(err){
  27. // console.log('写入失败:',err);
  28. // return
  29. // }
  30. // console.log('成功');
  31. // })
  32. // fs.renameSync("../data.txt","./data.txt")
  33. // console.log('成功');
  34. //删除文件
  35. // fs.unlink('./dat.txt',err=>{
  36. // if(err){
  37. // console.log('失败',err);
  38. // return
  39. // }
  40. // console.log('成功');
  41. // })
  42. // fs.unlinkSync("./dta.txt")
  43. //读取文件
  44. // fs.readFile("./data.txt",(err,data)=>{
  45. // if(err){
  46. // console.log('读取失败:',err);
  47. // return;
  48. // }
  49. // // console.log(data);//Buffer
  50. // console.log(data.toString());
  51. // })
  52. // let buf=fs.readFileSync("./1.html")
  53. // let buf=fs.readFileSync("./data/1.wmv")
  54. // console.log("读取成功");
  55. // console.log(buf);
  56. // console.log(buf.toString());//非文本类型文件,不可以toString()

8.3 文件夹操作

常见方法:

  • mkdir()

  • rmdir()

  • readdir()

  • stat() 读取文件的信息

    • stats对象

      • isDirectory() 是否为文件夹

      • isFile() 是否为文件

示例代码:

  1. /*
  2. 文件夹操作
  3. mkdir()
  4. readdir()
  5. rmdir()
  6. */
  7. const fs=require("fs");
  8. //创建文件夹
  9. // fs.mkdir("./mock",err=>{
  10. // if(!err){
  11. // console.log('成功');
  12. // return
  13. // }
  14. // console.log('失败:',err);
  15. // })
  16. // fs.mkdirSync("./route")
  17. //读取目录
  18. // fs.readdir("./data",(err,files)=>{
  19. // if(err){
  20. // console.log("失败;",err);
  21. // return
  22. // }
  23. // console.log(files);
  24. // })
  25. // let files=fs.readdirSync("./data")
  26. // console.log(files);
  27. //删除
  28. // //删除空目录
  29. // fs.rmdir("./data",err=>{
  30. // if(err){
  31. // console.log('失败',err);
  32. // return
  33. // }
  34. // console.log('成功');
  35. // })

8.4 流(了解即可)

  • 读取流

  • 写入流

  • 管道流

8.5 文件路径

  • 相对路径(参考目标不是当前文件,而是cmd运行时的路径)

  • 绝对路径(推荐使用)

  1. const fs=require("node:fs");
  2. // let rst=fs.readFileSync("./src/data/info.txt")
  3. let rst=fs.readFileSync(`${__dirname}/data/info.txt`)
  4. console.log(rst.toString());
  5. // console.log(`${__dirname}/data/info.txt`);
  6. // console.log('hello wrold');

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/174344
推荐阅读
相关标签
  

闽ICP备14008679号