Node.js
一、初识Node.js
-
什么是node.js?node.js能干什么?
① node.js就是一个前端觉得写个功能还要等后端捣鼓半天, 然后干脆就自己用javascript把后端搞定的一个东西。 ② 现在的node.js 用的最多的已经是它的npm了
-
node.js的模块(module)的概念
① 在node的语法中,一个JavaScript文件就是一个模块(module) ② 但是node中的模块是定义在了函数内部的, 所以JS的变量和函数不属于 全局的属性和方法 ③ 如果需要验证是否是全局的变量或属性,可以使用 js中的全局 global
let age = 18;
console.log(global.age === age); // false
-
node.js模块是被函数包括起来
其实每次在执行 JS模块之前,都会自动给 JS模块 加上 函数体包装起来: function(exports, require, module, __filename, __dirname){ 自己编写的js代码 } -- exports: 是一个对象,这是用来暴露JS内的属性和方法的,想暴露哪个, 把它当做exports的属性即可。 暴露: 因为在node语法里,一个js文件就是一个模块,作为模块就是可以被 其他的模块引用,但是js的模块是包装在了函数内,所以当你想要使用 js模块中的属性和方法时,就要将其暴露出来。使用 exports可以暴露。 -- require: 导入模块所使用的语句,值得注意的是需要使用 ./ 或者 ../ 开头 -- module: 所谓一个JS文件本身就是一个模块,mudule就是表示JS文件本身, 上面的exports是module的属性,所以在暴露属性和方法的时候可以使用 exports和module.exports -- __filename: 当前模块所在的路径 -- __dirname: 当前模块所在的文件夹路径
console.log(exports); // {} 空对象,因为没有给exports添加属性或方法
// console.log(module);
console.log(__filename); // c:\Users\ASUS\Desktop\各类文件夹\html+css+javastript\Node.JS\myNode\2_my_node1.js
console.log(__dirname); // c:\Users\ASUS\Desktop\各类文件夹\html+css+javastript\Node.JS\myNode
-
exports和module.exports的使用,以及模块的导入(ES6已有新模式)
exports的使用: 使用exports.属性或者exports.方法
exports.age = 18;
exports.sayHello = function(){
console.log("hello");
};
exports.sayBye = function(per){
console.log(`向${per}说拜拜`)
};
console.log(exports);
/*
将属性age,方法sayHello()、sayBye()都暴露出去了
当使用这个模块的时候就可以使用这些属性和方法了。
*/
执行结果: 可以看到exports不再是空的对象
二、文件操作
1、Buffer(缓冲区)
① 什么是buffer?
说到buffer,就不得不提到数组了,buffer的操作就和数组很类似。
区别是:数组不能存储二进制数据,而buffer是专门用来存储二进制数据的。
② 怎么使用buffer?
/*
创建Buffer的方式: 不能使用Buffer的构造函数 new Buffer()已被淘汰
1、已知str, Buffer.from(str); 根据str 将其转换成Buffer
2、Buffer.alloc(size); 根据size(大小)分配Buffer的大小
*/
let str = `南湖大道的五三八 总会被奔驰的汽车代替呀 但那拥堵的一小时 是最美丽的虚度年华`;
let buf = Buffer.from(str);
let buf1 = Buffer.alloc(10); // 分配了10个字节大小的空间,alloc是从底层开始分配的意思
console.log(buf1);
console.log(buf);
console.log(buf.toString());
执行结果:可以看到buf1变量是分配了 10个字节大小的内存,一个字节就是2^8=256,但是buffer会使用十六进制来显示也就是 00 – ff(0 – 255),但是在buffer内部存储的时候使用的是二进制。
③ 使用buffer时一些需要注意的点
① 使用了Buffer.alloc(size)生成的内存是由底层空间截取的,所以给定了多少字节大小的空间,
便不会再改变了的。
还可以使用Buffer.allocUnsafe(size)来生成Buffer空间,只不过这样生成的内存空间是不安全的,
会携带着一些内存数据出来。
② Buffer被称作缓冲区的缘故是,在传输给用户之前,数据是存在了Buffer内部的
③ 将buffer转换为字符串的命令是: buffer.toString()
2、文件操作
文件操作是分为读和写,读又分为四种:同步、异步、简单、流式