• nodejs的一些知识点


    1.接受post传过来的参数

    nodeJs接受Post传递的参数需要通过绑定两个事件来获取,

         querystring = require("querystring");  
    1 app.post('/communicate', function (req, res) { 2 var postData = ""; //POST & GET : name=zzl&email=zzl@sina.com 3 // 数据块接收中 4 req.on("data", function (postDataChunk) { 5 postData += postDataChunk; 6 }); 7 // 数据接收完毕,执行回调函数 8 req.on("end", function () { 9 console.log('数据接收完毕'); 10 var params = querystring.parse(postData); //GET & POST ////解释表单数据部分{name="zzl",email="zzl@sina.com"}12 msgQueue.push({ 13 "type":params.type, 14 "content":params.content 15 }); 16 res.send({ "content": { "seq": 24, "errorMessage": "" }, "result": "ok" }); 17 }); 18 });
    // 已经过时

     req绑定data事件来接受数据,如果触发了end事件就表示数据接受完毕!

     注意:接受的postData为一个字符串,需要通过"QueryString" 模块来实现URL参数字符串与参数对象的互相转换。它有两个api,

      一个是:stringify,另外一个是:parse,两个api的说明如下:

    querystring.stringify(obj, [sep], [eq]) //序列化一个对象到一个 query string。可以选择是否覆盖默认的分割符('&')和分配符('=')。           
    querystring.stringify({foo: 'bar', baz: 'qux'}, ';', ':')// 返回如下字串'foo:bar;baz:qux'
    querystring.parse(str, [sep], [eq], [options])//将一个 query string 反序列化为一个对象。可以选择是否覆盖默认的分割符('&')和分配符('=')。
    options对象可能包含maxKeys属性(默认为1000),它可以用来限制处理过的键(key)的数量.设为0可以去除键(key)的数量限制.
    示例:querystring.parse('foo=bar&baz=qux&baz=quux&corge') // { foo: 'bar', baz: ['qux', 'quux'], corge: '' }

     2.使用node的插件UglifyJs来合并和压缩文件

    var fs = require('fs');
     2 var jsp = require("./UglifyJS-master/uglify-js").parser;
     3 var pro = require("./UglifyJS-master/uglify-js").uglify;
     4 var finalCode='';
     5 function jsMinifier(flieIn) {
     6     var flieIn=Array.isArray(flieIn)? flieIn : [flieIn];
     7     var origCode,ast;
     8 
     9     var getAllFiles = function (dir) {
    10         var filesArr = fs.readdirSync(dir);
    11         for(var j = 0; j < filesArr.length; j++) {
    12             var isDir = fs.lstatSync(dir+'/'+filesArr[j]);
    13             if(isDir.isDirectory()){
    14                 getAllFiles(dir+'/'+filesArr[j]);
    15             }else {
    16                 readFile(dir+'/'+filesArr[j]);
    17             }
    18         }
    19     }
    20      function readFile(filename){
    21         origCode = fs.readFileSync(filename, 'utf8');
    22         ast = jsp.parse(origCode);
    23         ast = pro.ast_mangle(ast);
    24         ast= pro.ast_squeeze(ast); 
    25         finalCode +=';'+ pro.gen_code(ast);
    26      }
    27      for(var i=0; i<flieIn.length; i++) {
    28         var isDir = fs.lstatSync(flieIn[i]);
    29         if(isDir.isDirectory()) {
    30             //为目录,获取目录下所有的文件。
    31             getAllFiles(flieIn[i]);
    32         }else {
    33             readFile(flieIn[i]);
    34         }
    35     } 
    36 }
    37 jsMinifier(process.argv[2]);
    38 fs.writeFileSync(process.argv[3], finalCode, 'utf8');

    运行:

    node jsMinifier /data/samba/iyy_dev/index/assets/models/wirelesswebim need.js 

     3.nodejs延迟执行

     setImmediate方法和process.nextTick()方法都是延迟执行的方法,先来看下面一个例子,来区别两者的区别。

    process.nextTick(function(args){
        console.log("nextTick延迟执行!");
    });
    setImmediate(function(args){
        console.log("setImmediate延迟执行!");
    });
    console.log("正常执行!");
    //正常执行!
    //nextTick延迟执行!
    //setImmediate延迟执行

    具体原因:process.nextTick是idle观察者,setImmediate是check观察者。事件循环是,idle>I/O>check。

    参考博客:http://www.jianshu.com/p/d070e11ffa4d

    4.NODE_ENV的作用

    它的作用是区别开发和生成环境,通过它可以对开发和生成环境作不同的处理,在终端可以这么设置:

    export NODE_ENV=production
    //那么在代码中就这样处理了
    if (process.env.NODE_ENV === 'production') {
        // just for production code
    }

    5.node中cookie和session

    这篇博客写的还是蛮不错的:https://niefengjun.cn/blog/576c6f44353308f7389956822726645b.html

    6.缓存加载

    node运行时会缓存编译和执行的模块。不同于浏览器储存缓存,他是储存模块的执行对象。

  • 相关阅读:
    转载一篇不错的Mac上安装Apache和多版本PHP的文章
    Mac 上配置tomcat 及可能碰到的问题。
    iOS通知中心 NSNotificationCenter详解
    字符缓冲区读取文件BufferedReader
    BufferedWriter—newLine
    缓冲流复制文件与基本流复制文件比较
    BufferedOutputStream缓冲流
    properties集合
    JDK7,JDK9流中异常的处理
    try-catch-finally处理流中的异常
  • 原文地址:https://www.cnblogs.com/liuyinlei/p/5101436.html
Copyright © 2020-2023  润新知