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, ...
随机推荐
- Codeforces 2016 ACM Amman Collegiate Programming Contest B. The Little Match Girl(贪心)
传送门 Description Using at most 7 matchsticks, you can draw any of the 10 digits as in the following p ...
- Samba服务器配置
Samba服务器配置流程: (1)安装samba服务器先用#rpm -ivh samba-列出与samba有关的rpm包然后选择第一个包,用tab键补齐文件名 (2)创建新用户和其密码#useradd ...
- 面试题目——《CC150》数组与字符串
面试题1.1:实现一个算法,确定一个字符串的所有字符是否全都不同.假使不允许使用额外的数据结构,又该如何处理? 注意:ASCII字符共有255个,其中0-127的字符有字符表 第一种解法:是<C ...
- 在 Github 上找「好东西」的方法
使用 Github 的站内搜索,搜索: Awesome + 你的关键字
- PHP系统声明式事务处理
转自:http://www.jianshu.com/p/34261804bc45 1.数据库事务 事务(Transaction)是并发控制的基本单位.所谓的事务,它是一个操作序列,这些操作要么都执行, ...
- 兼容IE6的min-width、min-height
如果一个站是宽屏的,你左右拖动浏览器的窗口网站宽度会随着窗口的大小而改变,而浏览器窗口宽度减小到一定程度后就会出现下边的滚动条,网站宽度就不会再减小了,我们知道这一简单的功能用css的min-widt ...
- Servlet接口五种方法介绍
Servlet接口定义了5种方法: init() service() destroy() getServletConfig() getServletInfo() init() 在Servlet实例化后 ...
- UIScrollView的常见属性
@property(nonatomic) CGPoint contentOffset; 这个属性用来表示UIScrollView滚动的位置 (其实就是内容左上角与scrollView左上角的间距值) ...
- 签名、BOM头、编码、Windows记事本编码、java编码解码的那些事
对于Windows记事本: ANSI :GB2312 java中应使用GBK解码 Unicode :有签名的UTF-16LE java中应使用UTF-16解码 Unicode big endian : ...
- jquery版小型婚礼(可动态添加祝福语)
前两天在网上不小心看到“js许愿墙”这几个字,我的神经就全部被调动了.然后就开始我的百度生涯,一直寻觅许愿墙背景图片和便利贴图片,觅了好久……一直没找到满意的……无意间看到祝福语和一些卡通婚礼图片.最 ...