Skip to content

Instantly share code, notes, and snippets.

@RobertWang
Last active August 29, 2015 14:07
Show Gist options
  • Save RobertWang/7589e3a06080204aa3f6 to your computer and use it in GitHub Desktop.
Save RobertWang/7589e3a06080204aa3f6 to your computer and use it in GitHub Desktop.
Node.js 开发指南 书摘(2014年国庆期间阅读)

Node.js 开发指南

书摘

  • 事件触发

  • 单线程

  • 无阻塞

  • 模块和包

包的管理

  1. 创建一个包

    mkdir <package_name> ; cd <package_name> npm init

  2. 将自己的包上传npmjs.org

    npm adduser / npm whoami

  3. 发布

    npm npm publish

  4. 取消发布 / 从npmjs.org上删除

debug

使用node-inspector调试nodejs

npm install -g node-inspector node --debug-brk=5858 <debug.js> node-inspector

browser : http://127.0.0.1:8080/debug?port=5858

Tips:

Node.js适合I/O密集型的应用,不善于处理计算密集型应用。

标准输入

初始时,输入流是被暂停的。使用标准输入前,需要先恢复流。

process.stdin.resume();
process.stdin.on('data', function(data){
	process.stdout.write('read from console: ' + datat.toString());
})

Notice:

不要使用setTimeout(fn,0)代替process.nextTick(callback),前者比后者效率要低得多。

process.nextTick(callback)

常用工具util

实现原型间的继承 util.inherits

util.inherits(constructor, superConstructor)

example:

var util = reuqire('util');
function Base()	{
	this.name = 'base';
	this.base = 1991;
	this.sayHello = function() {
		console.log('Hello '+this.name);
	};
}

Base.prototype.showName = function() {
	console.log(this.name);
};

function Sub() {
	this.name = 'sub';
}

util.inherits(Sub, Base);

var objBase = new Base();
objBase.showName();
objBase.sayHello();
console.log(objBase);

var objSub = new Sub();
objSub.showName();
// objSub.sayHello();
console.log(objSub);

Tips:

events 是 Nodejs最重要的模块,没有之一。

events 是可以注册多个监听器 (可叠加)

express 建立工程 express -t ejs <project_name> cd <project_name> && npm install

ejs 是一个模版引擎, express 默认支持 Jade 和 ejs

express 支持的HTTP请求绑定方法

请求方式 绑定方法
GET app.get(path, callback)
POST app.post(path, callback)
PUT app.put(path, callback)
DELETE app.delete(path, callback)
PATCH app.patch(path, callback)
TRACE app.trace(path, callback)
CONNECT app.connect(path, callback)
OPTIONS app.options(path, callback)
所有 app.all(path, callback)

控制权转移

express匹配到路径时,请求总是被前一条路由规则捕获,后面的会被忽略。如果需要后在继续处理,通过调用控制转移来实现调用。

next();

Javascript: 中的难点

  • apply, call
  • bind
  • prototype
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment