NodeJS的优势:
跨平台、体积小、速度快、开源免费、非阻塞异步I\O、单线程处理高并发、
cd : 切换路径 …/ ./ /
dir : 查看当前路径下的所有文件和文件夹
mkdir : 创建文件夹
dir.> : 创建文件
del : 删除文件
rmdir : 删除文件夹 空文件夹 /q静默删除 /s强制删除
cls : 清屏
Node和原生JS的不同点是:
1.Node有服务器
2.Node可以进行文件流操作
3.Node基于模块开发
// console.log('hello NodeJS');
// 引入模块
const fs = require('fs');
// fs = 123;
// console.log(fs);
console.log(1111111111);
// 文件操作 读取test文本
fs.readFile('./test/test.txt','utf-8',(error,data)=>{
if (error){
console.log('读取失败');
}else{
console.log(data);
}
})
console.log(2222222222);
node核心API构建用的是异步事件驱动架构,其中某些类型的对象又称触发器(emitter)。会触发命名事件来调用函数,又称监听器。所有能触发的事件对象都是EventEmitter类的实例
这些对象有一个 eventEmitter.on(函数)用于一个或这个多事件绑定到命名事件中
events模块中只提供了一个对象 events.EventEmitter, 核心就是监听与触发
/*
事件驱动
事件驱动基于NodeJS核心模块enevts模块 所以说 我们需要使用到模块
模块的引入使用require 这是一个异步操作
模块的引入等于引入了一个对象
使用模块中的任何东西 都需要模块.方法 模块.属性
核心模块是Node安装的时候自带的模块 不需要定义 也不需要下载
*/
const events = require('events');
// 使用EventEmitter这里 来定义事件或者触发事件
let event = new events.EventEmitter();
// 都是用event实例中的on方法进行绑定事件
// 内置两个参数 第一个参数是事件的名称 自定义
// 第二个参数是回调函数 事件的执行
event.on('I_LOVE_YOU',(name,timer)=>{
console.log(name + '我等了' + timer + '年,终于等到你');
})
// 定义好了事件 我们使用emit方法进行触发事件
// 触发事件内置若干参数
// 第一个参数是事件的名字
// 后面的参数 如果说事件有形参 那么分别是事件的实参
event.emit('I_LOVE_YOU','Mary',18);
event.emit('I_LOVE_YOU','Eric',19);
event.emit('I_LOVE_YOU','Tom',4);
event.emit('I_LOVE_YOU','Jerry',3);
ES5中不支持原生的模块化 通过script引过来,Node为了对模块进行管理 引入了CommonJs规范
模块的引用:使用 require()方法
Node在js编写的内容,都是运行在一个独立的函数中,外部的模块 无法访问 只有暴露之后 才能进行访问、
模块主要分为三种
核心模块就是我们在安装好NodeJS之后,程序给我们自带的模块,直接引入就行
常见的核心模块有 fs events http path URL querystring
第三方模块就是我们核心模块中不存在的,需要下载才能使用,没有下载的话模块不存在
如果想使用第三方模块 那么我们需要进行下载 第三方模块管理工具叫做npm
https://www.npmjs.com/
NPM是包管理工具 ,如果说CommonJS包规范是理论,NPM就是其中一种实践。
对于Node而言,NPM帮助其完成了第三方模块的发布、安装和依赖等
借助NPM Node与第三方模块之间形成了很好的一个生态系统
npm -v 查看npm的版本
npm version 查看所有模块的版本
npm init 初始化项目(创建package.json) 下载模块之前必须初始化
npm i/install 包名 安装指定的包 @版本号,不加版本默认为最新
npm i/install 包名 --save 安装指定的包并添加依赖 运行依赖
npm i/install 包名 --save-dev 安装指定的包并添加依赖 开发依赖
npm i/install 包名 -g 全局安装(一般都是一些工具)
npm i/install 安装当前项目所依赖的包
npm s/search 包名 搜索包
npm uninstall 包名 卸载包
npm r/remove 包名 删除一个包
模块下载之前必须进行初始化
模块的下载不是全局下载,一般情况下不会使用全局下载
下载之后只能在该文件夹及其子文件夹中进行使用
自定义模块 是我们自己定义的JS文件 需要我们使用
和ES6的模块化差不多 都需要进行暴露 引入
暴露有三种方式
exports.属性 || 方法
module.exports.属性 || 方法
module.exports = { 属性,方法}
module.exports和exports之间的区别
严格上老说exports和module.exports之间没有任何区别 堆栈空间都是相等的,但是 如果说 我们这两种方法同时使用 那么module.exports会将exports暴露的数据全部覆盖掉
// 第一种暴露方式
exports.name = 'Eric';
exports.age = 18;
exports.fun = ()=>{
console.log('函数');
}
exports.arr = [11,22,33];
// exports.obj = {name,age};
exports.obj = {name : 'Mary',age : 19};
// 第二种暴露方式
// module.exports.name = 'Eric';
// module.exports.age = 18;
// module.exports.fun = ()=>{
// console.log('函数');
// }
// module.exports.arr = [11,22,33];
// module.exports.obj = {name : 'Mary',age : 19};
// 第三种暴露模式 常用
// let name = 'Eric';
// let age = 18;
// let fun = ()=>{
// console.log('函数');
// }
// let arr = [11,22,33];
// let obj = {name : 'Mary',age : 19};
let username = 'admin';
let password = '123';
let object = {
username,
password
}
module.exports = {
object
}
使用require进行引入,引入过来的是一个对象
注意 :引入的是自定义模块 那么必须加上路径,即使是当前路径 那么我们也不能省略./
const public = require('./4.public');
// console.log(public);
// console.log(public.name);
// console.log(public.age);
// console.log(public.arr);
// console.log(public.obj);
// public.fun();
// console.log(public);
// console.log(public.name);
// console.log(public.age);
console.log(public);
console.log(exports == module.exports);
Buffer结构和数组非常像,操作的方法也相似,数组中不能存储二进制的文件,而buffer专门存储二进制的数据。
buffer在全局作用域,不用引入直接使用。buffer中存储的是二进制的数据 ,显示的时候是以16进制显示。
buffer中每个元素从00-ff 、0-255。buffer 中的每个元素占用内存的一个字节(8比特)
关系:8bt = 1B 1024B = 1KB 1024KB = 1MB 1024MB = 1GB 1024GB = 1TB 1024TB = 1PB
一个汉字不是一个字节 是三个字节,buffer大小一旦确定 不能修改 buffer是对底层内存的直接操作
Buffer.from(str) 将一个字符串转换成buffer
buf.toString(); 将缓冲区的数据 转成字符串
// let str = 'offcn';
let str = '你好 offcn';
console.log(str);
// 将字符串转化为Buffer 使用Buffer中的from方法
// 内置一个参数 参数是字符串
let buf = Buffer.from(str);
console.log(buf.length);
console.log(buf);
// 如果说将Buffer转化为字符串 使用Buffer中的toString
// 如果只是转化字符串的话 不需要参数 直接写就可以
let newStr = buf.toString();
console.log(newStr);