zoukankan      html  css  js  c++  java
  • nodejs review-01

    05 Run your first web server

    • 使用curl
    //指定方法;显示header信息
    curl -X GET -i localhost:3000
    
    //扩展:显示详细的三次握手过程
    curl -v localhost:3000
    
    • 设置内容长度
    //默认会自动产生;如果手动设置比实际小,则只会传输那部分的内容;
    //如果设置比实际大,浏览器会一直等待剩余部分内容而停留在加载状态;
    
    res.writeHead(200, {
        'Content-Length': length
      });
    

    06 Use the Node js debugger

    • 使用debug: node debug example.js
      * list(n):显示多少行代码
      * setBreakpoint: 设置断点;
      * cont: 跳到断点处;
      * repl: 打印出当前栈中的存储值;

    • 实际中常用node-inspector

    13 Use arrays

    • 添加:
    arr.push(val)  //return length;
    arr[arr.length] = val  //return add value;
    
    • 删除
    delete arr[n]    //just set undefined;
    arr.split(n, 1);    //return deleted [val]
    

    20 Compare synchronous and asynchronous programming

    • 读取文件
    //fs.open(path, flags[, mode], callback);            
    //fs.read(fd, buffer, offset, length, position, callback)
    
    fs = require('fs');
    
    fs.open('example.text', 'r', function (err, fd) {    //fd文件描述符
      if(err) return console.log('err');
      var buffer = new Buffer(1000000);
      fs.read(fd, buffer, 0, 1000000, null, function (err, bytes_read /*, buffer*/) {  //bytes_read读取的大小
        console.log(buffer.toString('utf8', 0, bytes_read));  //buf.toString([encoding][, start][, end])
        fs.close(fd); 
      });
    });
    
    //整个操作相当于fs.readFile;其已经包括文件打开关闭的处理;
    

    23 Yield control and improve responsiveness

    • 单线程的阻塞
    //一个查找两个数组相同值的方法
    //当数据量很大的情况下,callback方法会被阻塞
    
    setTimeout(callback, 3000);
    
    function intersect(arr1, arr2) {
      var intersection = [];
    
      for(var i = 0; i < arr1.length; i++) {
        for(var j = 0; j < arr2.length; j++) {
          if(arr2[j] === arr1[i]) {
            intersection.push(arr2[j]);
            break;
          }
        }
      }
      return intersection;
    }
    
    //加入process.nextTick或setImmediate;
    //差别:process.nextTick中的callback执行的优先级要高于setImmediate;
    setTimeout(callback, 3000);
    
    function intersect(arr1, arr2, cb) {
      var intersection = [], i = 0, len = arr1.length;
    
      function sub_compute_intersection() {
        for(var j = 0; j < arr2.length; j++) {
          if(arr2[j] === arr1[i]) {
            intersection.push(arr2[j]);
            break;
          }
        }
        i++ < len ? setImmediate(sub_compute_intersection)
          : cb(intersection);
      }
      sub_compute_intersection();
    }
    
    

    26 Combine loops and asynchronous programming

    • 利用回调和递归读取文件夹
    var fs = require('fs');
    var http = require('http');
    
    function file_list (cb) {
      fs.readdir('./', function (err, list) {
        if(err) return cb(err);
        var dirs_only = [], len = list.length;
    
        (function iterator (i) {
          if(i >= len) return cb(null, dirs_only);
          fs.stat('./' + list[i], function (err, stats) {
            if(err) return cb(err);
            stats.isDirectory() && dirs_only.push(list[i]);
            iterator(++i);
          }) 
        })(0);
      })  
    };
    
    
    http.createServer(function (req, res) {
      file_list(function (err, list) {
        if(err) {
          res.writeHead(503, {
            'Content-Type': 'application/json'
          });
          return res.end(JSON.stringify({message: err.message}));
        } else {
          res.writeHead(200, {
            'Content-Type': 'application/json'
          });
          return res.end(JSON.stringify({data: list}));
        }
       
      });
    }).listen(3000);
    

    29 Add support for query GET parameters

    • URL解析
    //设第二参数为true;
    var parse_url = url.parse(req.url, true));
    var pathname = parse_url.pathname;
    var page = parse_url.query.page;
    var size = parse_url.query.size;
    
    //值是正数的初始化
    (isNaN(page) || page <=0 ) && (page = 0)
    (isNaN(size) || size <=0 ) && (size = 0)
    
  • 相关阅读:
    iSCSI又称为IPSAN
    文档类型定义DTD
    HDU 2971 Tower
    HDU 1588 Gauss Fibonacci
    URAL 1005 Stone Pile
    URAL 1003 Parity
    URAL 1002 Phone Numbers
    URAL 1007 Code Words
    HDU 3306 Another kind of Fibonacci
    FZU 1683 纪念SlingShot
  • 原文地址:https://www.cnblogs.com/jinkspeng/p/5096293.html
Copyright © 2011-2022 走看看