Node.js 个人大锅炖笔记

模块化

每一个js文件 都是一个模块
使用require("")来导入模块()中写入地址,tips必须以./或…/开头 例如

require("./node.js");
require("./node");
///.js可以省略

闭包

在node中,每一个JS文件中的JS代码都是独立运行在一个函数中,并不是全局。
(相当于自调用的函数)
一个模块中的函数和
变量在其他模块中无法访问
可以通过exports 向外部暴露变量和方法
只需要想要暴露的变量或方法 只是为exports属性就行

exports.x = "我是ZLX";
exports.fun = function(){
    //xxxx
};

不要随意向全局写变量,会污染空间

模块标识

路径就是一种标识,模块分为核心模块和文件模块

  1. 核心模块:node引擎提供的模块 ,核心模块的标识 就是模块名字
    核心模块写名字 不用写路径
var fs = require("fs");
//fs 是核心模块
  1. 文件模块:由用户自己创建

全局变量

在node中有一个全局对象 global,作用和网页中的window类似
在全局中创建的变量都会作为global的属性保存
在全局中创建的函数都会作为global的方法保存

a = 10;   //不加var 就是全局变量
var b = 20; //默认为局部变量 ,闭包
console.log(global.a); //不会报错
console.log(global.b); //报错

node是在一个函数里运行

当node在执行模块中的代码时,会在代码顶部添加

///开头
function(exports, require,module,__filename,__dirname){

在结尾添加

///结尾
}

其实就是把模块里的代码全都包装在一个函数中运行,并且在函数执行的时候,传入了五个实参

  1. exports 该对象用来将变量或函数暴露到外边
  2. require 函数,用来引入外部的模块
  3. module 指模块本身
    exports 就是module的属性
    既可以用exports导出,也可以用module.exports导出
  4. __filename 当前模块的完整路径
  5. __dirname 当前模块的所在的文件夹路径

直接赋值一个对象

module.exports = {
    name:"猪八戒",
    age:28,
    sayname:function(){
        pass;
    }
};

exports 和Module.exports
通过exports只能使用 . 的方式来向外暴露内部变量
而 module.exports 既可以通过 . 的形式 也可以直接赋值

对象在堆内存中储存 引用

var obj = new object();
obj.name = "孙悟空";
var obj2 = obj;
console.log("obj = " + obj.name);
console.log("obj2 = " + obj2.name);
//孙悟空
//孙悟空
obj2.name = "猪八戒";
console.log("obj = " + obj.name);
console.log("obj2 = " + obj2.name);
//猪八戒
//猪八戒

包 package

包实际上就是一个压缩文件

  1. package.json 必备 描述文件
  2. bin 可执行的二进制文件
  3. lib js代码
  4. doc 文档
  5. test 单元测试

NPM (Node Package Manager)

npm帮助其完成了第三方模块的发布、安装和依赖等。借助NPM,Node与第三方模块之间形成了很好的一个生态系统。
安装Node 自带NPM

  1. npm search 包名
  2. npm install 包名
    目录下最好创建package.json文件
    npm init可以自动创建package.json
  3. 会装在node_modules文件夹中
  4. npm install 包名 -g全局安装 (全局安装的包一般都是一些工具,都是计算机里用到的 不是项目的)
  5. npm remove 包名删除包
  6. npm install 包名 --save安装并添加到依赖 可以自主修改package.json文件
  7. npm install安装当前项目依赖的全部包

缓冲区

Buffer 的结构跟数组很像,操作方法也和数组很类似,数组不能存储二进制数据,buffer专门存储二进制文件

var str = "Hello Atguigu";
var buf = Buffer.from(str);
console.log(buf); //buffer 48 55 6c 6c 6f 20 41 74 67 75 69 67 75
//buffer 存储的都是二进制数据

buffer中每一个元素的范围是从00 - ff ; 0 - 255
一个元素占用一个字节 1byte
buf.length占用内存大小
str.length字符串长度
unicode 一个汉字三个字节
utf-8 一个汉字两个字节
var buf2 = Buffer.alloc(10)创建一个10字节的缓冲区
buf2[0] = 88
buf2[1] = 255
buffer 大小一旦确定,不可修改 ,是对底层的修改

fs 文件系统 file system

通过Node操作系统文件

//fs 是核心模块 直接引入名字
var fs = require("fs");
//fs中同步方法(sync)和异步方法。同步会阻塞程序执行,除非执行完毕。异步不会阻塞 通过回调函数将结果返回  

同步文件写入

  1. 打开文件 fs.openSync(path, flags[, mode] )

    var fd = fs.openSync(“hello.txt”,“w”)

    //path 要打开文件的路径

    //flags 打开文件要做的类型

    ​ //r 只读

    ​ //w 可写

    mode 设置文件的操作权限,一般不传

  2. 向文件写入内容 fs.wirteSync(fd, string[ , position[ , encoding]])

​ fs.wirteSync(fd , “今天天气真不错”)

​ fs.wirteSync(fd , “今天天气真不错”,num) //从num的位置开始写

​ encoding 写入的编码,默认utf-8

  1. 关闭文件 fs.closeSync(fd);

    ​ fs.closeSync(fd);

异步文件写入

fs.open(path ,flags[, mode], callback) // callback 回调函数

回调函数 参数

  1. err 错误对象 如果没有
  2. fd
var fs = require("fs");

fs.open ("hello2.txt","w",function(err,fd){
    console.log("回调函数中的代码~~");
    if(!err){
        ///如果没有出错 则对文件进行写入操作
        fs.write(fd,"异步写入的文字",function(err){
            if(!err){
                console.log("写入成功~");
                //关闭文件
                fs.close(fd, function(err){
                    if(!err){
                        console.log("文件已关闭~");
                    }
                });
            }
        });
    }else{
        console.log(err);
    }
});
//关闭文件

简单文件写入

var fs = require("fs");
///直接写路径也可以c:/desktop/hello3.txt
fs.wirteFile("hello3.txt","这是要写入的内容",{flag:"w"},function(err){ //flag可以不写,w会全覆盖 ,a可以追加(继续写,不覆盖) 
    if(!err){
        console.log("写入成功~");
    }
});

流式文件写入

同步、异步、简单文件写入都不适合大文件,性能较差,容易导致内存溢出

var fs = require("fs");
//流式文件写入
//创建一个可写流
//fs.creatWriteStream(path[,options])
var ws = fs.creatWriteStream("hello3.txt");

//可以通过监听流的open 和 close 事件来监听流的打开和关闭 
//on 持续绑定,once 绑定一次性,触发一次自动失效
ws.once("open",function{
        console.log("水龙头被打开~")
        })
ws.once("close",function{
        console.log("水龙头被关闭~")
        })
ws.write("通过可写流写入文件内容");
ws.end(); //end()关闭源头,已经进入水管的不会消失  close()拔出水管,水管中的也会消失
//可以通过监听流的open 和 close 事件来监听流的打开和关闭

简单文件的读取

fs.readFile(path[,options],callback)

var fs = require("fs");
fs.readFile("hello.txt",function(err,data ){
    if(!err){
        console.log(err);
        //data 是一个buffer 关于hello.txt的二进制
        fs.writeFile("hello.jpg",data,function(err){
            if(!err){
                console.log("文件写入成功");
                //通过readfile读取文件,信息存入data,然后writefile 把data 写入hello.jpg中
            }
        });
    }
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值