基础node

一、node.js是什么?

node.js 是一个基于 Chrome V8 引擎的 JavaScirpt 运行环境。
二、优点及缺点

优点:Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,异步编程,使其轻量又高效。

缺点:单进程,单线程,只支持单核cpu,不能充分的利用多核cpu服务器。一旦这个进程崩掉,那么整个web服务就崩掉了。

三、基本使用

require()引入模块,返回一个模块对象;

module.exports()或者exports() 导出一个对象;

module.exports 与 exports 有什么区别?
一开始两者指向同一个空间,如果给两者分别赋值(指向不同的对象的时候),优先导出module.exports这个对象,使用时最好使用module.exports。

var md=require("math");

console.log(md.add(123,456));
console.log(md.mul(123,456));
//一个汉字在Buffer中占3个字节
var str="Hello world";
//将一个字符串存到Buffer中
var buf=Buffer.from(str);
//在Buffer中存储的都是二进制,但是在显示的时都是以16进制的形式显示
console.log(buf);
console.log(buf.length);//占内存大小
console.log(str.length);//字符串str长度

//创建一个指定大小的Buffer
var buf2=new Buffer(10);
console.log(buf2)//10个字节的Buffer
 //创建一个10个字节大小的Buffer
var buf3=Buffer.alloc(10);
//听过索引,操作buf3中元素
buf3[0]=88;
buf3[1]=88;
buf3[2]=0xaa;
buf3[9]=188;
buf3[10]=188;//Buffer大小一旦确定,不能修改
console.log(buf3);
//只要数字在控制台或页面中输出的一定是10进制
//Buffer.from()将一个字符串转化为Buffer
var fs=require("fs");
console.log(fs);

/*   同步文件的写入
          -手动55操作的步骤
          1.打开文件
                fs.openSync(path,flags[,mode])
                -path 要打开文件的路径
                -flags 打开文件要做的操作的类型
                  r只读的
                  w 可写的
                -mode  设置文件的操作权限,一般不传
                返回值
                  -该方法返回一个文件的描述符作为结果,我们可以通过该文件的描述符来对文件进行各种操作
          2.想文件中写入内容
             fs.writeSync(fd, string[, position[, encoding]])
               -fd 文件的一个描述符,需要传递需要写入文件的描述符
               -string 要写入的内容
          3.保存并关闭文件
            fs.closeSync(fd);
               -fd 要关闭文件的描述符
 */
//打开文件
var fd=fs.openSync("hello.txt","w");
//向文件中写入内容
fs.writeSync(fd,"今天天气真好~~~",20);
//关闭文件
fs.closeSync(fd);
/*   异步文件的写入
                fs.openSync(path,flags[,mode],callback)
                -异步调用的方法,结果都通过回调函数的参数返回的
                -回调函数两个参数;
                     err 错误对象,如果没有错误则为null
                     fd 文件的描述符
                 fs.writeSync(fd, string[, position[, encoding]],callback)
                 -用来异步写入一个文件
 */
fs.open("hello2.txt","w",function (err,fd) {
      //判断是否出错
       if(!err){
             //如果没有出错,这对文件进行写入操作
              fs.write(fd ,"这是异步写入的内容",function (err) {
                     if(!err) {
                            console.log("写入成功~~");
                     }
                     //关闭文件
                     fs.close(fd,function (err) {
                            if(!err) {
                                          console.log("文件已关闭~~");
                            }
                     })
                     });

       }else{      console.log("err");
                     }
              });
console.log("程序向下运行~~");



/*
-file 要操作的文件的路径
-data 要写入的数据
-options 选项,可以对写入进行一些设置
-callback 当写入完成以后执行的函数
 */
var fs=require("fs");
fs.writeFile("hello3,txt","这是通过writeFile写入的内容",{flag:"a"},function(err){
  if(!err){
   console.log("写入成功~~~");
  }else{
      console.log(err);
  }
})
//同步,异步,简单文件的写入都不适合大文件的写入,性能较差,容易导致内存溢出
/*流式文件写入
创建一个可写流
fs.createWriteStream(path[,options])
-可以用来创建一个可写流
-options  配置的参数
 */
var ws =fs.createWriteStream("hello3.txt");
/*
on(事件字符串,回调函数)
      -可以为对象绑定一个事件
      once(事件字符串,回调函数)
      -可以为对象绑定一个一次性事件,该事件将会在触发一次以后自动失败
 */
//可以通过监听流的open和close事件来监听可写流的打开和关闭
ws.once("open",function () {
    console.log("流打开了~~");
})
ws.once("close",function () {
    console.log("流关闭了~~");
})

//通过ws向文件中输入内容
ws.write("通过可写流写入文件的内容");
ws.write("通过可写流写入文件的内容");
ws.write("通过可写流写入文件的内容");
//关闭流
ws.end();



/*
   1.同步文件读取
   2.异步文件读取
   3.简单文件读取
   fs.readFile(path[, options], callback)
   fs.readFileSync(path[, options])
   data 读取的数据,会返回一个Buffer
   4.流式文件读取
   也适用于一些比较大的文件,可以分多次将文件读取到文件中
 */
var fs=require("fs");
fs.readFile("hello3.txt",function (err,data) {
  if(!err){
      console.log(data);
      console.log(data.toString());
  }
})
var rs=fs.createReadStream("hello3,txt");
var ws=fs.createWriteStream("hello3,txt");
// rs.once("open",function () {
//     console.log("可读流打开了~~");
// })
// rs.once("close",function () {
//     console.log("可读流关闭了~~");
// })
// //如果要读取一个可读流中的数据,必须要为可读流绑定一个data事件,data事件绑定完毕,它会自动开始读取数据
// rs.on("data",function (data) {
//         console.log(data);
// })
//pipe()可以将可读流中的内容,直接输入可写流中
rs.pipe(ws);
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页