Month: June 2016

Node.js 常用工具

util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaScript 的功能 过于精简的不足。 util.inherits util.inherits(constructor, superConstructor)是一个实现对象间原型继承 的函数。 JavaScript 的面向对象特性是基于原型的,与常见的基于类的不同。JavaScript 没有 提供对象继承的语言级别特性,而是通过原型复制来实现的。 在这里我们只介绍util.inherits 的用法,示例如下: var util = require('util'); function Base() { this.name = 'base'; this.base = 19… Read More

Node.js 路由

我们要为路由提供请求的URL和其他需要的GET及POST参数,随后路由需要根据这些数据来执行相应的代码。 因此,我们需要查看HTTP请求,从中提取出请求的URL以及GET/POST参数。这一功能应当属于路由还是服务器(甚至作为一个模块自身的功能)确实值得探讨,但这里暂定其为我们的HTTP服务器的功能。 我们需要的所有数据都会包含在request对象中,该对象作为onRequest()回调函数的第一个参数传递。但是为了解析这些数据,我们需要额外的Node.JS模块,它们分别是url和querystring模块。 url.parse(string).query

Node.js 全局对象

JavaScript 中有一个特殊的对象,称为全局对象(Global Object),它及其所有属性都可以在程序的任何地方访问,即全局变量。 在浏览器 JavaScript 中,通常 window 是全局对象, 而 Node.js 中的全局对象是 global,所有全局变量(除了 global 本身以外)都是 global 对象的属性。 在 Node.js 我们可以直接访问到 global 的属性,而不需要在应用中包含它。 全局对象与全局变量 global 最根本的作用是作为全局变量的宿主。按照 ECMAScript 的定义,满足以下条 件的变量是全局变量: 在最外层定义的变量; 全局对象的属性; 隐式定义的变量(未定义直接赋值的变量)。 当你定义一个… Read More

Node.js: 如何继承 events 自定义事件及触发函数

events 是node.js的核心api ,几乎大部分node.js 的api都继承 events 类(javascript中没有类,也不存在继承,确切说是模拟类和继承,点击查看) 比如我们常见的 http , stream ,fs …..等等. 因为node.js的实现就是异步非阻塞io,通过事件轮询触发异步回调的机制,在单线程运行模式下,合理应用服务器资源才是制胜法宝,正是因为事件轮询才使得异步IO在高并发处理下游刃有余,所以大部分的包去继承 events 似乎合情合理. 下面我们可以看一个常见的事件处理,但是我们用的时候似乎并没有当回事: var req = http.request(params, functi… Read More

Node.js:一个路由2次 request

node.js 和其他服务器端编程语言有很大区别,语言上的特性优点已经在前面分享过,这里就不说了. 与其他语言相比,还有一个区别,node.js 自身实现了一个服务器,而其他服务器端语言大部分要依赖Apach ,nginx ,IIS 等. node.js 可以用几句代码轻松实现: var http = require('http'); var webServer = function (req, res){ res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'}); res.write('<html><body>'); res.write('&l… Read More

Node.js:海量数据大行其道的今天 node.js 在IO方面如何异步非阻塞

以其高性能,异步IO著称,当然node.js 在 stream 上的异步也非常到位. 我们一般理解的异步请求是这样的: 同时处理多件件事件 A,B,C,D,E,F,G …. 如果用.net语言去处理这些事情可能有2钟情况 (1) A,B ….. G 按照顺序一件一件处理,最后得到返回值. (2)开启多线程去同时执行多个事件. 而node是单线程处理语言,天生就不是富二代,资源还有限……上帝造物的时候是公平,当你发现关上一扇门的话,同时肯定会为你开一扇窗.所以 node 有了异步回调. 所以node.js下的处理可能是这样的: A,B …… G 依然是按照这个顺序处理… Read More

javascript 中面向对象实现 如何继承

上一篇博客已经说了关于javascript中的封装, 其中也说了javascript中本来是没有类的,我们上一篇的封装也是用javascript中的函数去模拟一个类,最后我们还模拟了一个构造函数.那 么今天和大家分享的关于继承,同样不是真正严格意义上面向对象的继承,而是通过javascript中的原型链关系实现函数之间的属性,方法共享.下面简 单分享几种封装的方法. 既然说到继承,我们必须有一个基类 function Person(){ this.eat=function(){ return '吃食物'; } } Person.prototype.sport=function(){ return '运动'; } Person… Read More

javascript 中的面向对象实现 如何封装

javascript 是一门很灵活的语言,也是一门有缺陷的语言. 比如我们今天要谈的,如何用面向对象的手法来封装javascript ,javascript是没有类的概念的. 所以今天谈到的封装,其实就是用javascript的函数来实现的. var People{ name:'一介布衣', age:'30' }; 这就是javascript中的一个对象,里面封装了2个属性. 实例化一个对象的实例 people var people=new People(); console.log(people.name,people.age); //一介布衣,30 如果我们需要在函数里返回一个对象,如下代码: function CreateP… Read More

Node.js:入门资料

  《快速搭建 Node.js 开发环境以及加速 npm》 http://fengmk2.com/blog/2014/03/node-env-and-faster-npm.html 《Node.js 包教不包会》 https://github.com/alsotang/node-lessons 《ECMAScript 6入门》 http://es6.ruanyifeng.com/ 《七天学会NodeJS》 https://github.com/nqdeng/7-days-nodejs Node.js 资源 《前端资源教程》 https://cnodejs.org/topic/56ef3edd532839c33a99d… Read More

Node.js:模块查找,引用及缓存机制

1. Node.js的模块载入方式与机制 Node.js中模块可以通过文件路径或名字获取模块的引用。模块的引用会映射到一个js文件路径,除非它是一个Node内置模块。Node的内置模块公开了一些常用的API给开发者,并且它们在Node进程开始的时候就预加载了。   其它的如通过NPM安装的第三方模块(third-party modules)或本地模块(local modules),每个模块都会暴露一个公开的API。以便开发者可以导入。如 var mod = require('module_name') 此句执行后,Node内部会载入内置模块或通过NPM安装的模块。require函数会返回一个对象,该对象公… Read More

Node.js: 深入浅出Nodejs读书笔记

今天终于把朴灵老师写的《深入浅出Node.js》给学习完了, 这本书不是一本简单的Node入门书籍,它没有停留在Node介绍或者框架、库的使用层面上,而是从不同的视角来揭示Node自己内在的特点和结构。建议 有一定Node基础或者做过Node方面的小项目的同学阅读,看完以后你的思维会有很奇特的碰撞,我看的时候就常常会有这样的想法:“哦,原来这个功能是 这样实现的哦”。下面这篇文章是我第二次阅读《深入浅出Node.js》的一些学习记录,并且通过百度脑图这个工具来画出思维导图,每天将自己的学习总结写在这篇文章下面。图片文字太小可以右键从新标签页打开图片,然后点击就可以放大显示。 新增原始文件脑图地址,这样… Read More

Node.js: exports 和 module.exports 的区别

我理解的exports 和 module.exports 的区别,欢迎大家吐槽~ 为了更好的理解 exports 和 module.exports 的关系,我们先来补点 js 基础。示例: app.js var a = {name: 'nswbmw 1'}; var b = a; console.log(a); console.log(b); b.name = 'nswbmw 2'; console.log(a); console.log(b); var b = {name: 'nswbmw 3'}; console.log(a); console.log(b); 运行 app.js 结果为: D:\>node app { name: 'nswbmw 1' } { name: 'nsw… Read More