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的更多相关文章

  1. nodejs复习01

    console 格式化 console.log("%s:%s", "a", "b") //字符串 console.log("%d. ...

  2. nodejs弯路-01之'express' 不是内部或外部命令

    最近正想用node+angular+mongodb来完成一个小项目,三样都算是从零开始学习吧. 一开始是想用express -e projectname去创建一个ejs模板的项目.(一两句话就可以把大 ...

  3. nodeJs学习-01 http模块

    http模块基础: const http = require("http"); //引入http系统模块 var server = http.createServer(functi ...

  4. [Java 教程 01] Hello,Java!

    前言 从事编程已经有一段时间了,突然发现,Java作为我的第一编程语言,自己似乎对她并有一个系统的思想.当下Java依旧保持着超高的热度,新特性也不断出现,从当初学习的java6版本到最近刚出的jav ...

  5. [整理]Node入门 » 一本全面的Node.js教程 - Demo实践所遇到的问题

    花了一个上午看完[转载]Node入门 » 一本全面的Node.js教程 根据里面的Demo自己手动实现过程中还是遇到了些问题,特整理在此. <1>.由于node.msi安装包已经自动添加了 ...

  6. NodeJS 学习总结 01 安装配置

    1 安装NodeJS 具体参考已发布的文章Ubuntu学习总结-07 Nodejs和npm的安装 2 使用淘宝 NPM 镜像 国内直接使用 npm 的官方镜像是非常慢的,这里推荐使用淘宝 NPM 镜像 ...

  7. 【Nodejs】理想论坛帖子爬虫1.01

    用Nodejs把Python实现过的理想论坛爬虫又实现了一遍,但是怎么判断所有回调函数都结束没有好办法,目前的spiderCount==spiderFinished判断法在多页情况下还是会提前中止. ...

  8. 【NodeJS 学习笔记01】不学就老了

    前言 再不学nodeJs,我们就老了......在HTML5大浪袭来的时候,很多先辈就开始了NodeJs之旅,而那时我还在做服务器端的程序后来转成前端,和梯队的距离已经很大了,因为我会服务器端语言,还 ...

  9. Nodejs in Visual Studio Code 01.简单介绍Nodejs

    1.开始 作者自己:开发人员,Asp.Net , html / js , restful , memcached , oracle ,windows , iis 目标读者:供自己以后回顾 2.我看No ...

  10. 01.Nodejs入门之Helloworld

    说明:本文章可供有一定js基础的朋友参考nodejs入门,本文未讲解nodejs的安装,如有需要的同学可以加QQ3382260752找我,进行交流学习. 1.新建文件夹helloworld demo, ...

随机推荐

  1. Photon服务器进阶&一个新游戏的出产(一)

    许久没写了,今日闲来无事随性一些,总结一下最近的游戏经历(写游戏) Photon服务器的进阶~ 距离上一篇估计也过去一个多月了,对于Photon真是又爱又恨. 爱着它的书写方便. 恨着它的教程稀少总走 ...

  2. iOS苹果推送功能实现步骤

    1.在钥匙串里 导出推送证书Apple Push notification Services 的 certificate, 命名为cer.p12,放在电脑桌面 ,期间密码设为123456 2.在钥匙串 ...

  3. ubuntu/var/log/下各个日志文件

    ubuntu/var/log/下各个日志文件 本文简单介绍ubuntu/var/log/下各个日志文件,方便出现错误的时候查询相应的log   /var/log/alternatives.log-更新 ...

  4. TypedReference

    http://stackoverflow.com/questions/4764573/why-is-typedreference-behind-the-scenes-its-so-fast-and-s ...

  5. CocoaPods 升级

    也不知道是什么时候,ruby.taobao开始不能用了,在公司的电脑上一直装不上,还卡在那里, 旁边的老大投来了异样的目光,或者我是应该提升下技术了-- 一.升级gem gem update --sy ...

  6. WordPress数据库优化技巧

    各位站长都知道wordpress用久了就会越来越慢.今天就给大家介绍如何给自己的wordpress提速,分两种方法:1.插件属性wordpress的都知道其插件是相当的多,只要你能想得到的基本都有,在 ...

  7. php提供更快的文件下载

    在微博上偶然看到一篇介绍php更快下载文件的方法,其实就是利用web服务器的xsendfile特性,鸟哥的博客中只说了apache的实现方式,我找到了介绍nginx实现方式的文章,整理一下! let' ...

  8. 自定义cell自适应高度

    UITableView在许多App种被大量的应用着,呈现出现的效果也是多种多样的,不能局限于系统的一种样式,所以需要自定义cell 自定义cell呈现的内容也是多种多样的,内容有多有少,所以需要一种能 ...

  9. FMDB的使用

    //1.创建数据库    NSString *path = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomai ...

  10. R语言学习笔记-机器学习1-3章

    在折腾完爬虫还有一些感兴趣的内容后,我最近在看用R语言进行简单机器学习的知识,主要参考了<机器学习-实用案例解析>这本书. 这本书是目前市面少有的,纯粹以R语言为基础讲解的机器学习知识,书 ...