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, ...
随机推荐
- jQuery5~7章笔记 和 1~3章的复习笔记
JQery-05 对表单和表格的操作及其的应用 JQery-06 jQuery和ajax的应用 JQery-07 jQuery插件的使用和写法 JQery-01-03 复习 之前手写的笔记.实在懒得再 ...
- Windows远程数据同步工具cwRsync
1. cwRsync简介cwRsync是Rsync在Windows上的实现版本,Rsync通过使用特定算法的文件传输技术,可以在网络上传输只修改了的文件.cwRsync主要用于Windows上的远程文 ...
- Nancy总结(三)Nancy资料介绍
Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,可以基于 .NET 和 Mono 平台构建轻量级基于 HTTP 的Web 服务.它更多的是借鉴了Ruby的一些特性和Ruby的MVC ...
- python Windows下的android设备截图工具
目录 界面版 命令行版 界面版 利用python的wx库写个ui界面,用来把android设备的截图输出到电脑屏幕,前提需要安装adb,涉及到的python库也要安装.代码如下: #!/usr/bin ...
- 7、I/O流
一.流的概念:流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作.I/O就 ...
- Hadoop概括——学习笔记<一>
之前有幸在MOOC学院抽中小象学院hadoop体验课. 这是小象学院hadoop2.X概述第一章的笔记 第一章主要讲的是hadoop基础知识.老师讲的还是比较全面简单的,起码作为一个非专业码农以及数据 ...
- linuxmint 17安装scim输入法
安装输入法框架: sudo apt-get install scim 安装输入法: sodu apt-get install scim-pinyin 此时启动的输入法的候选词框不随着光标移动,需要安装 ...
- DbHelper为什么要用Using?
我们分析一下DbHelper做什么事情,大家都知道它用于数据库的连接操作,这里的数据库连接会创建非托管资源,c#的垃圾回收机制不会对它处理,需要实现IDisposable接口手动释放. 手动释放的 ...
- 【荐】如何正确理解PHP之include,include_once,require,require_once等包含作用域
我们为大家总结的PHP include作用域的问题包括:PHP include 变量作用域和函数.类的作用域等方面的问题.希望对大家有所帮助. 很多程序员在使用PHP语言进行实际编程时,通常只会关注P ...
- 【Alpha版本】冲刺阶段——Day 1
我说的都队 031402304 陈燊 031402342 许玲玲 031402337 胡心颖 03140241 王婷婷 031402203 陈齐民 031402209 黄伟炜 031402233 郑扬 ...