nodejs 基础

【前端开发-----NodeJS】nodejs快速入门教程,想要快速入门nodejs就看这一篇文章就够了,基础部分特详细,按要点整理知识点

nodejs 中API的特点

  1. 最后一个参数是callback
    • 同步方法会阻塞主线程,虽然有callback方法,没有实际作用
方法名('参数1','配置项',callback(err,data){if(err) throw err// data:返回的结果
})
  1. 可监听
const result = 方法('参数','配置项')
result.on('data',(res)=>{// res:执行结果
})
result.on('close',()={// 执行完毕,结果也全部返回
})
  1. promise版
promise('命令').then(res=>{// 命令执行成功后的结果
}).catch((err)=>{// 异常
})

1. path

Nodejs 第十二章(path)

const path = require('path');
// 简单的把参数拼接为路径
console.log(path.join("a","b")) // a\b
// 返回的必须是根路径,没有给定根路径就拼接了当前目录的路径,我不知道它怎么做到的
console.log(path.resolve("a","b"))  // D:\vue\code\node\nodejs-xuexi\a\b
// 给定根路径,返回的是从盘符开始的
console.log(path.resolve("/a","b"))  // D:\a\b
// 正常是结合__dirname使用的
console.log(path.resolve(__dirname,"b","c")) //D:\vue\code\node\nodejs-xuexi\b\c
// 返回文件的路径
console.log(path.dirname("a/b/c/index.js")) // a\b\c
// 返回文件的文件名
console.log(path.basename("a/b/c/index.js")) // index.js
// 返回文件的后缀
console.log(path.extname("a/b/c/index.js")) // .js
// 将路径转为对象形式
console.log(path.parse("a/b/c/index.js")) // { root: '', dir: 'a/b/c', base: 'index.js', ext: '.js', name: 'index' }
// 与parse想对应,将对象形式转为字符串形式
console.log(path.format({ root: '', dir: 'a/b/c', base: 'index.js', ext: '.js', name: 'index' })) // a/b/c\index.js

2. 全局变量

Nodejs 第十章(全局变量)

1. 原生的全局变量

  • __dirname:当前文件的绝对路径
  • __filename:当前文件的带有路径的文件名
console.log(path.join(__dirname))	// D:\vue\code\node\nodejs-xuexi
console.log(path.join(__filename))	// D:\vue\code\node\nodejs-xuexi\index.js

2. 定义全局变量

  • ECMAScript 2020 出现了一个globalThis全局变量,在nodejs环境会自动切换成global ,浏览器环境自动切换window非常方便

3. os

const os = require('os');// 操作系统类型
console.log(os.type())  // windows_NT
// 操作系统平台
console.log(os.platform()) // win32
// CPU架构
console.log(os.arch())  // x64
// 系统版本
console.log(os.release()) // 10.0.19041
// 系统正常运行时间
console.log(os.uptime())  // 7405.656
// CPU信息:架构、型号、速度、缓存等
console.log(os.cpus())  // 获取CPU信息
// 系统内存总量(单位:字节)
console.log(os.totalmem())  // 34284859392
// 系统剩余内存(单位:字节)
console.log(os.freemem()) // 23526678528
// 用户的主目录,在window中返回的是 %USERPROFILE%
console.log(os.homedir()) // C:\Users\Administrator
// 网络信息
console.log(os.networkInterfaces())console.log(os.machine()) // x86_64

4. process 进程

Nodejs 第十四章(process)

// 返回一个数组,其中包含启动Node.js进程时传递的命令行参数。
console.log(process.argv)
/*
['C:\\Program Files\\nodejs\\node.exe',  // node命令路径'D:\\vue\\code\\node\\nodejs-xuexi\\process.js',  // 被执行文件路径'--open', // 获取命令后面的参数'--xx'
]
*/// 当前系统的环境变量,并可以临时修改系统变量,但是不会真正修改系统中的系统变量
console.log(process.env)
// 获取当前进程的进程ID
console.log(process.pid)  // 2696
// cpu 架构,和os.arch()一样
console.log(process.arch) // x64
// 结束当前进程
process.exit()
// 杀死pid的进程
process.kill(进程的pid)

5. child_process 子进程

Nodejs 第十五章(child_process)

  • 在node中带有Sync的方法是同步方法,会产生阻塞,非I/O(输入/ 输出)操作一般使用主线程执行
  • 异步方法会在子线程中执行
  1. exec
// exec:返回一个完成的执行结果
// 通过cmd执行命令,返回的结果必须小于200kb
exec('dir',(error,stdout,stderr)=>{console.log(stdout.toString());
})
// 同步执行
const menu = execSync('dir');
console.log(menu.toString());
  1. spawn
// spawn:执行过程中,边执行边返回
// 通过cmd执行命令,
spawn('node',['path.js'])
// 通过data和close事件监听命令执行情况
const { stdout } = spawn("node", ["path.js"]);
// stream是spawn执行返回的数据
stdout.on("data", (stream) => {console.log("spawn执行", stream.toString());
});
stdout.on("close", () => {console.log("spawn执行结束");
});
  1. execFile
// execFile:执行文件 只能执行js文件
execFile('node',['path.js'],(error,stdout,stderr)=>{console.log(stdout.toString());
})
  1. fork
    • 给当前进程创建子进程,并在子进程中执行文件
fork('path.js')
  • 与子进程的通信:给子进程发送消息
// 主进程
const forkProcess = fork('child.js')forkProcess.send("主进程发送的消息")
// child.js
process.on('message', function(m){console.log('child子进程接收到的消息:', m);	// child子进程接收到的消息: 主进程发送消息
})
  • 与子进程通信:子进程给主进程发送消息
// 主进程
const forkProcess = fork('child.js')// forkProcess.send("主进程发送的消息")
forkProcess.on('message', function(m){console.log('主进程接收到的消息:', m)	// 主进程接收到的消息: child子进程向父进程发送消息
})
// 子进程,child.js
// process.on('message', function(m){
//   console.log('child子进程接收到的消息:', m);
// })process.send('child子进程向父进程发送消息');

6. evnet 事件订阅

Nodejs 第十七章(events)

// 1. 引入
const eventEmit = require('events');
// 2. 实例
const event = new eventEmit();
// 3. 订阅
event.on('say', (data) => {console.log(data);
})
// 4. 发布
event.emit('say','hello world');
  • 关闭事件
const fn = (data) => {console.log(data)
}
//event.once('run',fn) // 调用多次的情况下,只执行一次
event.on('run',fn)
// 关闭事件时,事件名和方法必须要与on时的一致,需要把执行的事件定义到外部
event.off('run',fn)
event.emit('run','hello world')

7. utils 工具集

Nodejs 第十八章(util)

1. util.promisify 把函数包装为promise

// 执行原生的exec函数
const { exec } = require("child_process");exec('node -v',(err,stdout,stderr)=>{if(err){return err}console.log(stdout.toString())
})
// 把exec包装为promise函数
const util = require('util');
const execPromise = util.promisify(exec);
execPromise('node -v').then(data=>{console.log(data)
}).catch(err=>{console.log(err)
})

2. format 格式化

const util  = require('util');const formatString = util.format('%s --- %d', 'xm', 666);console.log(formatString) //xm --- 666

8. fs 文件

Nodejs 第二十章(fs 上)
Nodejs 第二十章(fs 下)

1. 读文件

const fs = require("fs");
// 1.异步读文件,不加utf-8,data是二进制buffer
fs.readFile('file.txt','utf-8', (err, data) => {if (err) throw err;console.log(data);
})// 2. 同步读文件,返回的是数据流
const stream = fs.readFileSync("file.txt", (err) => {if (err) throw err;
});
console.log(stream.toString())// 3. readPromise版本的读文件
const { readFile } = require("fs/promises");
readFile("file.txt").then((res) => console.log(res.toString()));

2. 目录的创建和删除

  • 创建目录
const fs = require('fs')fs.mkdir('./test', (err) => {if (err) throw err;
})
// 递归创建目录需加参数
fs.mkdir('./test/test1/test2',{recursive:true},(err)=>{if (err) throw err;
})
  • 删除目录
// 删除目录
fs.rmdir('./test/test1/test2',(err)=>{if (err) throw err;
})
// 有子目录的情况下,删除父目录需要递归删除
fs.rmdir('./test',{recursive:true},(err)=>{if (err) throw err;
})

3. 改名

// 异步
fs.rename('./file.txt','file1.txt',(err)=>{if (err) throw err;
})
// 同步
fs.renameSync('./file1.txt','file.txt')

4. 文件修改的监听

fs.watch('./file.txt',(eventType,filename)=>{console.log('事件:',eventType,'---文件名:',filename) // 事件: change ---文件名: file.txt
})

5. 写入文件

const fs = require("fs");
// 写文件,将 Hello World 写入 hello.txt
fs.writeFileSync("hello.txt", "Hello World!");
// 上面的写入会覆盖原文件内容,如需给文件添加需要参数
fs.writeFileSync("hello.txt", "故人西辞黄鹤楼", {flag: "a", // 这里的参数很多
});// 原生的给文件追加内容的函数
fs.appendFileSync("hello.txt", "烟花三月下扬州");

6. 流文件

适合大文件的读写

  • 读、写流文件
const readStream = fs.createReadStream("file.txt");
const writeStream = fs.createWriteStream("file1.txt");
readStream.pipi(writeStream) 
  • 读大文件
// 读取文件时,一段一段读,不会一次性把文件读到内存
const readStream = fs.createReadStream("file.txt");
// 监听读文件,chunk:块
// streamObj:流文件对象,对象中有流的属性和方法
// .on:开始工作并监听
const streamObj = readStream.on("data", (chunk) => {console.log(chunk.toString());
})
//  文件读取完成后执行
readStream.on("close",()=>{console.log("文件读取完成")
})
  • 数据较大,分段写入
// 写入大量文件,分段写入
const tangshi = ['故人西辞黄鹤楼','烟花三月下扬州','孤帆远影碧空尽','唯见长江天际流',
];
// 1. 创建一个可写流
const writeStream = fs.createWriteStream("file.txt");
// 2. 分段写入数据
tangshi.forEach((line) => {writeStream.write(line);
})
// 3. 关闭流
writeStream.end();
// 4. 监听可写流
writeStream.on("finish", ()=>{console.log("写入完成");
})
writeStream.on("error", (err)=>{console.log(err);
})
writeStream.on("close", ()=>{console.log("流关闭");
})

7. 判断读取到的是文件还是文件夹

fs.stat('./text',(err, data)=>{console.log(data.isdir())
})

6. 硬链接和软连接

9. 哈希值

Nodejs 第二十一章(crypto)

  • md5:无论什么文件,计算后的md5值都是32位
const crypto = require('crypto')// 使用md5加密
const hash = crypto.createHash('md5')
// const hash = crypto.createHash('sha256')const data = 'hello world'
// 生成字符串的md5值
hash.update(data)
// 输出加密后的值,转换为16进制
console.log(hash.digest('hex'))	// 5eb63bbbe01eeed093cb22bb8f5acdc3

10. zlib 压缩

Nodejs 第二十四章(zlib)

  • gz:适合文件压缩
  • deflate:适合http响应体

1. gz

const fs = require('fs');
const zlib = require('zlib');// 压缩文件 zlib.createGzip()
const readStream = fs.createReadStream('file.txt');
const writeStream = fs.createWriteStream('output.txt.gz');  // 注意后缀
readStream.pipe(zlib.createGzip()).pipe(writeStream);
// 解压文件
const readStream = fs.createReadStream('output.txt.gz');
const writeStream = fs.createWriteStream('output.txt');
readStream.pipe(zlib.createGunzip()).pipe(writeStream);

2. deflate

const fs = require('fs');
const zlib = require('zlib');const readStream = fs.createReadStream('file.txt');
const writeStream = fs.createWriteStream('output.txt.deflate');  // 注意后缀
readStream.pipe(zlib.createDeflate()).pipe(writeStream);const readStream = fs.createReadStream('output.txt.deflate');
const writeStream = fs.createWriteStream('output.txt');
readStream.pipe(zlib.createInflate()).pipe(writeStream);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/458087.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件测试学习总结

一.软件测试概念和目的 软件测试的概念: 测试模型(V模型) 软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码实现的最终审查,它是软件质量保证的关键步骤。 通常对软件测试的定义有两种描述: 定义1:软件测试是为了发现错误而执行程序的过程 定义2:…

前端同步异步-setTimeout-Promise-async-await

总结下前端的同步异步、事件循环问题,如有错误欢迎指正。 目录 一、setTimeout定时器函数 1.定义 2.基本语法 3.返回值 4.使用 1)异步执行 2)嵌套使用 3)事件循环 二、Promise 1.定义 2.状态 3.基本语法 1&#xff0…

矩阵概念 和 性质

目录 一、矩阵因式分解 二、矩阵在图形学的运用 一、矩阵因式分解 1、先将矩阵化为上三角阵,得到U 2、每个主元列以下元素 主元 得到下三角阵 二、矩阵在图形学的运用 二维移动: 子空间H: 零向量属于H 对H中任意向量u、v,uv…

js构造函数和原型对象,ES6中的class,四种继承方式

一、构造函数 1.构造函数是一种特殊的函数,主要用来初始化对象 2.使用场景 常见的{...}语法允许创建一个对象。可以通过构造函数来快速创建多个类似的对象。 const Peppa {name: 佩奇,age: 6,sex: 女}const George {name: 乔治,age: 3,sex: 男}const Mum {nam…

利用 Puppeteer-Extra 插件提升自动化测试和网页抓取的效率与隐蔽性

在当今的互联网环境中,自动化测试和网页抓取已经成为许多开发者和数据分析师的日常工作之一。Puppeteer 是一个广泛使用的 Node 库,它提供了一个高级 API 来通过 DevTools 协议控制 Chrome 或 Chromium。然而,在某些场景下,我们可…

获取微博排行榜PHP

获取微博排行榜是获取微博html页面的数据,而非直接调用微博后端接口获取 PHP实现 class WeiBoHotSearchService extends BaseService {/*** 微博热搜缓存过期时间* var int*/protected int $expireTime 600;/*** 微博热搜URL* var string*/protected string $doma…

centos-LAMP搭建与配置(论坛网站)

文章目录 LAMP简介搭建LAMP环境安装apache(httpd)安装mysql安装PHP安装php-mysql安装phpwind LAMP简介 LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写:Linux操作系统,网页服务器Apache,…

HTML+CSS实现超酷超炫的3D立方体相册

效果演示 HTML和CSS实现一个简单的3D立方体加载动画的相册。它使用了HTML来构建立方体的结构&#xff0c;并通过CSS来添加样式和动画效果。 HTML <div class"loader3d"><div class"cube"><div class"face"><img src&qu…

多线程——线程安全的集合类

目录 前言 一、多线程环境使用 ArrayList 1.进行加锁 2.使用 SynchronizedList 类 3.使用 CopyOnWriteArrayList 类 二、多线程环境使用队列 1.进行加锁 2.使用阻塞队列 三、多线程环境使用哈希表 1.Hashtable 2.ConcurrentHashMap &#xff08;1&#xff09;缩小锁…

计算机毕业设计 | springboot+vue凌云在线阅读平台 线上读书系统(附源码)

1&#xff0c;绪论 随着社会和网络技术的发展&#xff0c;网络小说成为人们茶钱饭后的休闲方式&#xff0c;但是现在很多网络小说的网站都是收费的&#xff0c;高额的收费制度是很多人接受不了的&#xff0c;另外就是很多小说网站都会有大量的弹窗和广告&#xff0c;这极大的影…

医学数据分析中的偏特征图可视化

在医学领域&#xff0c;我们经常需要处理复杂的数据模型&#xff0c;探索特征与目标变量之间的关系。偏特征图(Partial Dependence Plot, PDP)是一种强大的可视化技术&#xff0c;可以帮助我们更好地理解模型的行为。通过这种图形&#xff0c;我们可以直观地观察每个特征对模型…

零一万物新模型Yi-Lightning:超越GPT-4o

10月16日&#xff0c;零一万物发布了最新的旗舰模型Yi-Lightning&#xff08;闪电&#xff09;&#xff0c;在中国大模型中首度超越 GPT-4o。它在国际权威盲测榜单 LMSYS 上取得了显著成绩&#xff0c;超越了硅谷知名 OpenAI 的 GPT-4o-2024-05-13 和 Anthropic Claude 3.5 Son…

关于iPhone 16 Pro评测视频评论区特征的多维度分析

1.项目背景 随着智能手机的迅速发展&#xff0c;消费者在选择新设备时越来越依赖于网络评价和用户反馈&#xff0c;B站作为中国领先的视频分享平台&#xff0c;聚集了大量科技评测内容&#xff0c;其中UP主的评论区成为用户讨论和交流的重要场所&#xff0c;特别是在iPhone 16…

基于SSM的汽车客运站管理系统【附源码】

基于SSM的汽车客运站管理系统&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1 设计原则 4.2 功能结构设计 4.3 数据库设计 4.3.1 数据库概念设计 4.3.2 数据库物理设计 5 系统实现 5.1 管理员功能实现 5.1.1 管理员信息 5.1.2 车…

【程序员的逆袭】:在失业的阴影下寻找光明

故事摘要 在失业的阴霾中&#xff0c;一位程序员如何通过外包项目重燃希望之火&#xff1f;这个故事讲述了他的谋生手段&#xff0c;如何在压力之下&#xff0c;通过信息差赚取生活所需。 要点 信息的力量&#xff1a;赚钱的关键在于信息差&#xff0c;而非单纯的体力或脑力…

【轻量级聊天应用】Vocechat本地服务器部署结合cpolar异地即时通讯

文章目录 前言1. 拉取Vocechat2. 运行Vocechat3. 本地局域网访问4. 群晖安装Cpolar5. 配置公网地址6. 公网访问小结 7. 固定公网地址 前言 本文主要介绍如何在本地群晖NAS搭建一个自己的聊天服务Vocechat&#xff0c;并结合内网穿透工具实现使用任意浏览器远程访问进行智能聊天…

iTerm2 保持SSH远程连接

1、保持SSH远程连接的稳定&#xff0c;防止因闲置时间过长而断开连接 When idle, send ASCII code 35 every 60 seconds每60秒 输入# 2、客户端设置保持活动 设置客户端每隔60秒发送一次保活信号&#xff0c;总共尝试3次。 vim ~/.ssh/configHost *ServerAliveInterval 60…

python csv库

python csv库 水一水又是一篇&#xff0c;乐 读取 import csv # 打开 CSV 文件 with open(example.csv, moder, newline) as file: csv_reader csv.reader(file) # 读取文件头&#xff08;可选&#xff09; headers next(csv_reader) print(f"Headers: {heade…

w001基于SpringBoot的在线拍卖系统

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

gateway 整合 spring security oauth2

微服务分布式认证授权方案 在分布式授权系统中&#xff0c;授权服务要独立成一个模块做统一授权&#xff0c;无论客户端是浏览器&#xff0c;app或者第三方&#xff0c;都会在授权服务中获取权限&#xff0c;并通过网关访问资源 OAuth2的四种授权模式 授权码模式 授权服务器将授…