初识NodeJS

一.NodeJS

NodeJS的优势:
跨平台、体积小、速度快、开源免费、非阻塞异步I\O、单线程处理高并发、

二、常用doc命令

​ cd : 切换路径 …/ ./ /

​ dir : 查看当前路径下的所有文件和文件夹

​ mkdir : 创建文件夹

​ dir.> : 创建文件

​ del : 删除文件

​ rmdir : 删除文件夹 空文件夹 /q静默删除 /s强制删除

​ cls : 清屏

三.Node基础语法

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);

四.事件驱动

1.概念

​ node核心API构建用的是异步事件驱动架构,其中某些类型的对象又称触发器(emitter)。会触发命名事件来调用函数,又称监听器。所有能触发的事件对象都是EventEmitter类的实例
这些对象有一个 eventEmitter.on(函数)用于一个或这个多事件绑定到命名事件中
events模块中只提供了一个对象 events.EventEmitter, 核心就是监听与触发

2.参数使用

/*
事件驱动
    事件驱动基于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);

五.模块**

1.概念

ES5中不支持原生的模块化 通过script引过来,Node为了对模块进行管理 引入了CommonJs规范
模块的引用:使用 require()方法
Node在js编写的内容,都是运行在一个独立的函数中,外部的模块 无法访问 只有暴露之后 才能进行访问、

模块主要分为三种

  1. 核心模块
  2. 自定义模块
  3. 第三方模块

2.核心模块

核心模块就是我们在安装好NodeJS之后,程序给我们自带的模块,直接引入就行

​ 常见的核心模块有 fs events http path URL querystring

3.第三方模块

​ 第三方模块就是我们核心模块中不存在的,需要下载才能使用,没有下载的话模块不存在
​ 如果想使用第三方模块 那么我们需要进行下载 第三方模块管理工具叫做npm

https://www.npmjs.com/

六、NPM

1.NPM概念

​ NPM是包管理工具 ,如果说CommonJS包规范是理论,NPM就是其中一种实践。

​ 对于Node而言,NPM帮助其完成了第三方模块的发布、安装和依赖等

​ 借助NPM Node与第三方模块之间形成了很好的一个生态系统

2.NPM使用

​ 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 包名 删除一个包

​ 模块下载之前必须进行初始化

​ 模块的下载不是全局下载,一般情况下不会使用全局下载

​ 下载之后只能在该文件夹及其子文件夹中进行使用

3.自定义模块

​ 自定义模块 是我们自己定义的JS文件 需要我们使用

​ 和ES6的模块化差不多 都需要进行暴露 引入

1.暴露

​ 暴露有三种方式

​ 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
}

2.引入

​ 使用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

1.概念

​ 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是对底层内存的直接操作

2.方法

​ 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);

你可能感兴趣的:(node,node.js)