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, ...
随机推荐
- 修改Firefox的User-Agent,伪装修改秘籍
火狐浏览器修改userAgent的办法一: 在火狐浏览器地址栏输入"about:config",按下回车进入设置菜单. 找到"general.useragent.over ...
- CocoaPods第三方库管理 iOS
越来越多的SVN管理,越来越多的工程文件,我不能总是那么一个一个的把第三方库拖进去,我厌倦了拖拽和配置,我找到了替代方法--CocoaPods 补充一下:最近在给新机子安装时 发现 sudo gem ...
- 11月10日下午 ajax做显示信息以后用ajax、Bootstrp做弹窗显示信息详情
1.用ajax做弹窗显示信息详情 nation.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu ...
- CSS3学习(圆角、图片、阴影、背景、渐变、文本、字体、2D、3D、过渡等)
matrix CSS3 1. 圆角 border-radius:边框圆角的圆角半径 四个值:第一个值为左上角,第二个值为右上角,第三个值为右下角,第四个值为左下角. 三个值:第一个值为左上角, 第二 ...
- Debian 8安装中文字体
1.使用的镜像是debian-8.3.0-amd64-kde-CD-1.iso,下载链接可在Debian网站找到,系统安装完成后中文显示为方框 2.安装字体 apt-get install xfont ...
- Android高手速成--第四部分 开发工具及测试工具
第四部分 开发工具及测试工具 主要介绍和Android开发工具和测试工具相关的开源项目. 一.开发效率工具 Json2Java根据JSon数据自动生成对应的Java实体类,还支持Parcel.Gson ...
- 【bzoj4326】[NOIP2015]运输计划
题目描述 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个星球,还有 n−1 条双向航道,每条航道建立在两个星球之间,这 n−1 条航道连通了 L 国的所有星球.小 P 掌管一家物流公司, 该 ...
- Chrome 及其 插件“个性化设置”备份
Chrome版本发布时间表 2016.10.13 v54.0.2840.59 主题颜色由 蓝色 变为 灰色 2016.11.17 重新使用 Chrome 浏览器(v54.0.2840.99),并设置 ...
- 利用 PhpStorm、Idea 等 IDE 如何 运行/调试 Go 程序 ?
以自己常用的 PhpStorm 为例 第一步:下载安装 Go插件 File -> Settings -> Plugins -> 输入关键字:Go 第二步:新建 Go项目 File - ...
- winform窗体弹出时,光标默认显示在指定的输入框内
private void Form1_Paint(object sender, PaintEventArgs e) { this.textBox1.SelectAll(); this.textBox1 ...