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)
nodejs review-01的更多相关文章
- nodejs复习01
console 格式化 console.log("%s:%s", "a", "b") //字符串 console.log("%d. ...
- nodejs弯路-01之'express' 不是内部或外部命令
最近正想用node+angular+mongodb来完成一个小项目,三样都算是从零开始学习吧. 一开始是想用express -e projectname去创建一个ejs模板的项目.(一两句话就可以把大 ...
- nodeJs学习-01 http模块
http模块基础: const http = require("http"); //引入http系统模块 var server = http.createServer(functi ...
- [Java 教程 01] Hello,Java!
前言 从事编程已经有一段时间了,突然发现,Java作为我的第一编程语言,自己似乎对她并有一个系统的思想.当下Java依旧保持着超高的热度,新特性也不断出现,从当初学习的java6版本到最近刚出的jav ...
- [整理]Node入门 » 一本全面的Node.js教程 - Demo实践所遇到的问题
花了一个上午看完[转载]Node入门 » 一本全面的Node.js教程 根据里面的Demo自己手动实现过程中还是遇到了些问题,特整理在此. <1>.由于node.msi安装包已经自动添加了 ...
- NodeJS 学习总结 01 安装配置
1 安装NodeJS 具体参考已发布的文章Ubuntu学习总结-07 Nodejs和npm的安装 2 使用淘宝 NPM 镜像 国内直接使用 npm 的官方镜像是非常慢的,这里推荐使用淘宝 NPM 镜像 ...
- 【Nodejs】理想论坛帖子爬虫1.01
用Nodejs把Python实现过的理想论坛爬虫又实现了一遍,但是怎么判断所有回调函数都结束没有好办法,目前的spiderCount==spiderFinished判断法在多页情况下还是会提前中止. ...
- 【NodeJS 学习笔记01】不学就老了
前言 再不学nodeJs,我们就老了......在HTML5大浪袭来的时候,很多先辈就开始了NodeJs之旅,而那时我还在做服务器端的程序后来转成前端,和梯队的距离已经很大了,因为我会服务器端语言,还 ...
- Nodejs in Visual Studio Code 01.简单介绍Nodejs
1.开始 作者自己:开发人员,Asp.Net , html / js , restful , memcached , oracle ,windows , iis 目标读者:供自己以后回顾 2.我看No ...
- 01.Nodejs入门之Helloworld
说明:本文章可供有一定js基础的朋友参考nodejs入门,本文未讲解nodejs的安装,如有需要的同学可以加QQ3382260752找我,进行交流学习. 1.新建文件夹helloworld demo, ...
随机推荐
- js整数补零
/* * * 整数前面补零 * * 质朴长存法 * num 要补灵的整数 * n个数,比整数位数多前面自动补零 * **/ function pad(num, n) { var len = num.t ...
- 通过jquery的serializearray处理表单数据成json格式,并提交到后台处理
var params = $("#myform").serializeArray(); var values = {}; for (var item in params) { va ...
- Win7如何删除需要管理员权限才能删除的文件夹
在Windows 7系统运行中.往往会遇到想要删除某个文件夹时,系统提示:文件夹访问被拒绝 你需要权限来执行此操作,如何才能删除此类文件夹呢? ------------------ --------- ...
- arguments
arguments 转数组 通常使用下面的方法来将 arguments 转换成数组: Array.prototype.slice.call(arguments); 还有一个更简短的写法: [].sli ...
- 在Application中集成Microsoft Translator服务之获取访问令牌
我在这里画了一张图来展示业务逻辑 在我们调用microsoft translator server之前需要获得令牌,而且这个令牌的有效期为10分钟.下表列出所需的参数和对于的说明 参数 描述 clie ...
- linuxmint 17安装qt5.3.1
从官方网站上下载的安装包,双击安装即可. 新建项目编译时,出现错误:cannot find -lGL 解决的方法:安装libgl1-mesa-dev,当然在安装时会安装其他的一些依赖包 在命令行中输入 ...
- JavaScript事件处理程序
JavaScript中的事件处理程序主要分为3种: HTML事件处理程序: <script type="text/javascript"> // HTML事件处理程序 ...
- window共享linux下的文件 samba
1.在Ubuntu上安装samba服务 sudo apt-get install samba 2.修改配置文件vim /etc/samba/smb.conf [xubu] (共享名) guest ac ...
- 使用maven打包的注意事项
maven编译项目的时候,默认使用的GBK,而目前大部分代码都使用的UTF-8的方式,所以这时候打出来的包容易出现乱码. 解决方式: <!-- compiler插件, 设定JDK版本 --> ...
- C++ 异常机制
程序在运行的时候可能产生各种可预料到的异常,例如磁盘不足,内存不足,或是数学运算溢出,数组越界之类的.为了解决这些问题,C++提供了异常处理机制,它一般是由try语句和catch语句构成. 一.try ...