1.接受post传过来的参数
nodeJs接受Post传递的参数需要通过绑定两个事件来获取,
querystring = require("querystring");
1 app.post('/communicate', function (req, res) { var postData = ""; //POST & GET : name=zzl&email=zzl@sina.com // 数据块接收中 req.on("data", function (postDataChunk) { postData += postDataChunk; }); // 数据接收完毕,执行回调函数 req.on("end", function () { console.log('数据接收完毕'); var params = querystring.parse(postData); //GET & POST ////解释表单数据部分{name="zzl",email="zzl@sina.com"} msgQueue.push({ "type":params.type, "content":params.content }); res.send({ "content": { "seq": 24, "errorMessage": "" }, "result": "ok" }); }); });
// 已经过时
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运行时会缓存编译和执行的模块。不同于浏览器储存缓存,他是储存模块的执行对象。
版权声明:除特别声明外,本站所有文章皆是本站原创,转载请以超链接形式注明出处!