zoukankan      html  css  js  c++  java
  • node.js基础

    events模块 只提供一个对象:events.EventEmitter。其核心是事件触发与事件监听功能的封装。

    方法1  addListener(event,listener) 为指定事件添加一个监听器 至监听器数组的尾部。

          2  on(event,listener) 为指定事件注册一个监听器接受一个字符串event 和一个回调函数

          3  once(event,listener) 为指定事件注册一个单次监听器,即监听器最多只会触发一次,后立即解除该监听器。

          4 removeListener(event,listener) 移除指定事件的某个监听器,

          5  removeAllListeners([event]) 移除指定事件的某个监听器  如果指定事件,则移除指定事件的所有监听器。

          6  listeners(event)  返回指定事件的监听器数组

          7  setMaxListeners(n) 监听器的限制数量 默认10个

          8  emit(event,[arg1],[arg2]) 按参数顺序执行每个监听器,如果事件有注册监听返回true,否则faulse

          9 listenerCount(emitter,event) 返回指定事件的监听器数量

    EventEmitter定义了一个特殊的事件error ,遇到异常情况时会触发 

            .emit('error');

    var events = require('events');
    var eventEmitter = new events.EventEmitter();
    
    // 监听器 #1
    var listener1 = function listener1() {
       console.log('监听器 listener1 执行。');
    }
    
    // 监听器 #2
    var listener2 = function listener2() {
      console.log('监听器 listener2 执行。');
    }
    
    // 绑定 connection 事件,处理函数为 listener1 
    eventEmitter.addListener('connection', listener1);
    
    // 绑定 connection 事件,处理函数为 listener2
    eventEmitter.on('connection', listener2);
    
    var eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection');
    console.log(eventListeners + " 个监听器监听连接事件。");
    
    // 处理 connection 事件 
    eventEmitter.emit('connection');
    
    // 移除监绑定的 listener1 函数
    eventEmitter.removeListener('connection', listener1);
    console.log("listener1 不再受监听。");
    
    // 触发连接事件
    eventEmitter.emit('connection');
    
    eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection');
    console.log(eventListeners + " 个监听器监听连接事件。");
    
    console.log("程序执行完毕。");

    Buffer类 创建一个专门存放二进制数据的缓冲区,类似于一个整数数组,存储数据。

    创建buffer类 1  var buf = new Buffer(10); 创建长度为10字节的buffer实例

                      2  var buf = new Buffer{[10,20,30,40]}; 通过数组创建

                      3  var buf = new Buffer ('www.runoob.com','utf-8');

    写入缓冲区

                   buf.write(string)   返回值是实际写入的大小   为数字  14

    从缓冲区读取数据

                   buf.toString('utf-8',0,5) 编码 起始索引,终止索引

                   buf.toJSON(buf)  返回json对象

    缓冲区合并 Buffer.concat([buf1,buf2])

    缓冲区比较  buf.compare(buf1); 返回-1则buf在buf1之前,返回0 则相同,返回>0则之后/

    拷贝缓冲区 buf.copy(buffer1)

    裁剪缓冲区 buf.slice(1,7)默认0到buf.length 返回一个新的缓冲区

    缓冲区长度 buf.length

    Stream 一个抽象的接口,有四种流类型:Readable-可读操作;writable-可写操作;duplex 可读可写操作;transform操作被写入数据然后读出结果。 

              常用的事件 data-当有数据可读是触发;end -没有更多的数据可读是触发 ; error 在接收和写入过程中发生错误时触发;finish所有数据已被写入到底层数据是触发;

    管道流 readerStream.pipe(writerStream);

    var fs = require("fs");
    
    // 创建一个可读流
    var readerStream = fs.createReadStream('input.txt');
    
    // 创建一个可写流
    var writerStream = fs.createWriteStream('output.txt');
    
    // 管道读写操作
    // 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中
    readerStream.pipe(writerStream);
    
    console.log("程序执行完毕");

    链式流 一般用于管道操作。

    var fs = require("fs");
    var zlib = require('zlib');
    
    // 压缩 input.txt 文件为 input.txt.gz
    fs.createReadStream('input.txt')
      .pipe(zlib.createGzip())
      .pipe(fs.createWriteStream('input.txt.gz'));
      
    console.log("文件压缩完成。");

    // 解压 input.txt.gz 文件为 input.txt
    fs.createReadStream('input.txt.gz')
      .pipe(zlib.createGunzip())
      .pipe(fs.createWriteStream('input.txt'));
      
    console.log("文件解压完成。");

    模块系统:一个node.js文件就是一个模块,提供了exports和require两个对象,其中 exports是模块公开的接口,require用于从外部获取一个模块的接口的exports对象。

    // 解压 input.txt.gz 文件为 input.txt
    fs.createReadStream('input.txt.gz')
      .pipe(zlib.createGunzip())
      .pipe(fs.createWriteStream('input.txt'));
      
    console.log("文件解压完成。");
    
    
    //main.js 
    var Hello = require('./hello'); 
    hello = new Hello(); 
    hello.setName('BYVoid'); 
    hello.sayHello(); 

    全局变量:global

                  __filename 表示当前正在执行的脚本的文件名。它将输出文件所在位置的绝对路径,且和命令行参数所指定的文件名不一定相同。

                  __dirname 表示当前执行脚本所在的目录。

                  setTimeout(cb,ms)  全局函数在指定的毫秒数后执行指定的函数cb。

                  clearTimeout(t)  停止一个之前var t= setTimeout(cb,ms)创建的定时器。

         process 描述当前node.js 进程状态的对象,process有很多方法和属性,方便更好的与控制系统的交互。

                              process.abort(); process.cwd(); ......

    文件系统:

    数组 Array

    初始化 1 构造函数 var arr = new Array();

                            new Array(3) //[ , , ]

                            new Array('sid','chen',false)  //

             2 字面量方法 var arr1 = []

    检测方法 

              arr instanceof Array  //true

              Array.isArray(arr)     //true

    转换  Object.keys(obj)  //把索引作为薪的数组  将对象转换为数组

            split('')

            toString()  join(',')  数组转换成字符串

            .sort(自定义方法) 修改数组本身 排序 以字符串的顺序,同时修改数组本身

            .reverse() 修改数组本身  倒叙

    栈和队列操作 (数组)

             push(102,103)  //放入数组的末尾

             pop()  //取出数组的最后一个值 返回这个数值,原数组则减少这个值

             shift() //从头普取出一个

             unshift(1,2,3,4)  //从头部插入一个

           concat () //连接两个数组,返回新的数组,不会更改原数组

           slice(2,5) 从第2位取到底5位

           splice (1,1) 从第2个开始删 1个 

           splice(1,0,333,444)  插入

    出入函数作为参数

    every()   //循环数组每一项 都返回true 则返回true

    some()   //循环数组每一项  一个返回true 则返回true

    forEach()  // 组成数组再返回

    filter()   //找出符合函数条件的 组成数组返回来

    map()   //   运算后,组成数组饭回来

    reduce( function(prev,cau,index,arr){})  // 

    reduceRight()

    创建Web服务器和TCP服务器

    使用http模块创建Web服务器

    Express服务器:

    路由:将不同的请求,分配给相应的处理函数;区分:路径、请求方法

    三种路由法方法:

    1 path

    2 Router  定义一组 子路由

    var Router = express.Router();
    Router.get('/add',function(req,res){
    res.end('Router /add
    ');
    });
    Router.get('/list',function(req,res){
    res.end(Router /list
    ');
    });
    qpp.use('/post',Router);

    3 route

    app.route('/article').get(function(req,res){
         res.end('route /article getm');})
        .post(function(req,res){
    res.end('route /article post
    ');
    });
    

    jikexueyuan

    严格模式的使用:"use strict" 1在整个脚本中,2 在函数中;

    语句:label语句:

    1 outter:for(var i=0;i<3;i++){
    2    inner:for(var j=0;j<2;j++){
    3        console.log('i:',i,'j:',j);
    4          if(i ===1){
    5           break outter; 
    6 }
    7 }
    8 }

    对象属性:

    arguments直接读取对象;

    arguments.length 读取对象长度;

    arguments[0] 读取对象的索引为0的值;

    function testArg(){
        console.log('argument:',arguments);
        console.log('argument  count:',arguments.length);
        console.log('first argument:;,arguments[0]);
    }
    testArg(1,2,3,4);
    

    eval('console.log("this is eval")')  //this is eval  将字符串转换成执行环境   但是不推荐,执行时间和调试及安全问题

    url部分:protocol协议:http ;slashes:是否使用双斜杠;host 域名;port:端口;hostname:主机名;hash:锚点;query:发送给服务器的数据;path:路径;href:

    url.parse('路径')   //解析成URL对象

    url.format({url对象})  //合成路径

    url.resolve('url路径','url路径')      //合并路径

    序列化对象:querystring.stringify({...},''/',')     //将对象序列化成 以&或,连接的字符串

    反序列化字符串:querystring.parse('',',')         //将字符串反序列化为对象,

    http:

    get/request  http.request(options[,callback])

    mongodb 特点;

    1 使用BSON存储数据

    2 支持相对丰富的查询操作

    3 支持索引

    4 副本集

    5 分片

    6 无模式

    7 部署简单方便

    启动:

    参考https://cnodejs.org/topic/581b0c4ebb9452c9052e7acb   node.js中文简介

    http://justsee.iteye.com/blog/1570652   session详解与cookie

    由于HTTP协议是无状态的,而出于种种考虑也不希望使之成为有状态的,因此,后面两种方案就成为现实的选择。具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,

    cookie的内容主要包括:名字,值,过期时间,路径和域。 路径和域一起就构成了cookie的作用范围。

              会话cookie:如果不设置过期时间,则表示其生命周期为浏览器会话其间,只要关闭浏览器,cookie就消失了。一般保存在内存中。

              如果设置了过期时间,浏览器会把cookie保存到硬盘上,再次打开浏览器cookie仍然有效

    session机制:是一种服务器端机制,服务器使用一种类似于散列表的结构来保存信息。

            当程序为某个客户端请求创建一个session的时候,服务器首先检查这个客户端请求里是否已经包含了一个session id ,若有,说明创建过,服务器会按照此session id将此session检索出来使用;如果客户端请求中不包含session id ,就会创建一个session 并生成一个唯一且不易被找到规律以仿造的 session id存到客户端cookie中。保存在硬盘上,就会再次找到此session id。所以关闭浏览器不会导致session被删除。

    http://www.ruanyifeng.com/blog/2014/05/restful_api.html   restful 解释

    测试性能:命令行运行  ab -c1000 -n10 http://www.xxxx.com/

  • 相关阅读:
    python学习笔记(4)装饰器
    python学习笔记(3)函数
    python学习笔记(2)集合
    python学习笔记(1)字典
    nginx.conf文件内容详解
    关于斐波拉契数列引出的迭代器生成器的一点讨论
    MAC电脑运行python并发编程遇到的问题
    docker 11 :私有仓库搭建
    docker 10 :docker单机网络模式
    【转】C#环形队列
  • 原文地址:https://www.cnblogs.com/yxiaoqian/p/5809323.html
Copyright © 2011-2022 走看看