Fork me on GitHub

Coding Poineer

Coding Poineer

Coding Poineer

Coding Poineer

Coding Poineer

Coding Poineer

Coding Poineer

Coding Poineer

Coding Poineer

Coding Poineer

Coding Poineer

node.js 学习总结

const http = require('http')
// 引入http模块
http.createServer(function(req,res){
  // 创建一个http服务器
  // 这里是一个回调函数
  console.log('服务器');
  res.writeHead(200,{'Content-Type':'text/plain'});
  res.end('hello world\n')
}).listen(8080)

在Node应用程序中,执行异步操作的函数将回调函数作为最后一个参数,回调函数又接收错误对象作为第一个参数

  • 观察者模式:events内置事件模块
    • // 引入 events 模块
      var events = require('events');
      // 创建 eventEmitter 对象
      var eventEmitter = new events.EventEmitter();
      // 绑定事件及事件的处理程序
      eventEmitter.on('eventName', eventHandler);
      // 触发事件
      eventEmitter.emit('eventName');
      
  • 在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。
    • 创建 Buffer 类
    • 写入缓冲区、读取缓冲区数据
    • 将 Buffer 转换成 JSON 对象:buf.toJSON()
      const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]);
      const json = JSON.stringify(buf);
      // 当字符串化一个 Buffer 实例时,JSON.stringify() 会隐式地调用该 toJSON()
      // 输出: {"type":"Buffer","data":[1,2,3,4,5]}
      console.log(json);
      const copy = JSON.parse(json, (key, value) => {
        return value && value.type === 'Buffer' ?
          Buffer.from(value.data) :
          value;
      });
      // 输出: <Buffer 01 02 03 04 05>
      console.log(copy);
      
  • Stream流
    • 读取流、写入流
      var fs = require('fs')
      var zlib = require('zlib') //压缩模块
      var rs = fs.createReadStream('input.txt') // 读取流
      var os = fs.createWriteStream('output.txt') // 写入流
      rs.setEncoding('utf-8')
      rs.on('data',chunk=>{
        os.write(chunk,'UTF8')  })
      rs.pipe(os)  // 管道流,完成对大文件的慢慢传输
      // 链式流,例:先压缩再写入
      rs.pipe(zlib.createGzip()).pipe(fs.createWriteStream('output.zip'))
      // 链式流,解压(这里压缩文件名后缀必须是'.gz')
      fs.createReadStream('input.txt.gz').pipe(zlib.createGunzip()).pipe(fs.createWriteStream('input.txt'));
      
  • 模块系统    

    一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码、JSON 或者编译过的C/C++ 扩展

    • exports:暴露'属性名:属性值',key:暴露对象 ; module.exports 暴露'属性值',原生暴露对象
    • require查找顺序:文件模块缓存 -> 原生模块缓存 -> 原生模块 -> 文件模块
    • require接收以下几种模块
      1. http、fs、path等,原生模块
      2. ./mod或../mod,相对路径的文件模块
      3. /pathtomodule/mod,绝对路径的文件模块
      4. mod,非原生模块的文件模块
  • NodeJs全局对象是global,ECMAScript是window
    • 全局变量:全局对象的属性
      • 在最外层定义的变量;
      • 全局对象的属性
      • 隐式定义的变量(未定义直接赋值的变量)
posted @ 2020-10-10 16:30  365/24/60  阅读(316)  评论(0编辑  收藏  举报