摘要: 今天要介绍的两个模块分别是assert和vm,下面我们就分别介绍。 使用assert做测试 node中,我们可以使用assert模块来测试代码。equal()和notEqual()分别作相等性和不等性的判断,第一个参数是期望值,第二个参数是真实值,第三个参数是异常信息,例子如下:var assert = require('assert');assert.equal(1, true, 'Truthy');assert.notEqual(1, true, 'Truthy');测试通过,不会有结果显示,但是一旦不通过就会有异常抛出,运行结果: equa 阅读全文
posted @ 2012-10-03 23:28 下一站永远 阅读(6234) 评论(0) 推荐(1) 编辑
摘要: 虽然node对操作系统做了很多抽象的工作,但是你还是可以直接和他交互,比如和系统中已经存在的进程进行交互,创建工作子进程。node是一个用于事件循环的线程,但是你可以在这个事件循环之外创建其他的进程(线程)参与工作。 进程模块 process模块允许你获得或者修改当前node进程的设置,不想其他的模块,process是一个全局进程,你可以直接通过process变量直接访问它。 process实现了EventEmitter接口,exit方法会在当进程退出的时候执行。因为进程退出之后将不再执行事件循环,所有只有那些没有回调函数的代码才会被执行。在下面例子中,setTimeout里面的语句... 阅读全文
posted @ 2012-10-03 15:32 下一站永远 阅读(7703) 评论(0) 推荐(1) 编辑
摘要: 今天介绍的是DNS和加密相关的api。 DNS dns包括两个主要的方法:resolve(),把域名转换成dns记录;reverse(),把ip地址转换成域名。 dns.resolve()包括三个参数:域名,记录类型和回调函数。var dns = require('dns');dns.resolve('yahoo.com', 'A', function(e,r) { if (e) { console.log(e); } console.log(r);} ); 回调函数返回两个参数,第一个是异常,第二个是处理结果。dns里面有一些方便的方法,如下面 阅读全文
posted @ 2012-09-29 10:22 下一站永远 阅读(2230) 评论(0) 推荐(1) 编辑
摘要: I/O是使node与其他框架与众不同的很重要的一个部分,本章将解释它是如何实现node非堵塞I/O的。 Streams stream api是一个抽象接口,他帮助node中很多部分实现不间断输入和输出的操作。stream api为它的实现类提供了一些通用的方法和属性,streams可以是可读的、可写的或者两者都是,并且他们都实现了EventEmitter,可以emit事件。 可读streams 可读streams提供了一系列的方法和事件,使我们可以对数据源的数据进行访问。基本上,可读stream就是为了触发data事件,同时他提供了一些属性允许你对获取的数据大小和获取速度进程配置。... 阅读全文
posted @ 2012-09-28 14:14 下一站永远 阅读(2341) 评论(1) 推荐(0) 编辑
摘要: node一个重要任务是用来创建web服务,接下来我们就学习与此相关的一个重要的api -- http。我们使用http.createServer()创建一个http服务的实例,用来处理来自客户的请求。http模块包含一些重要的内容,下面我们就来学习。 http服务器 我们先来看一个简单的例子,如何创建一个简单的服务器。require('http').createServer(function(req,res){ res.writeHead(200, {}); res.end('hello world');}).listen(8125); 上面的代码比较简单,使用 阅读全文
posted @ 2012-09-27 21:50 下一站永远 阅读(2845) 评论(0) 推荐(1) 编辑
摘要: 从今天开始,我们将介绍node的一些重要的api,首先向大家介绍的是events。他是node中相当重要的一个api,也是实现其他一些api的基础,对他有好的理解,会帮助你使用好其他的api。 如果你用javascript开发过浏览器的应用,那你一定很熟悉事件。但浏览器中的事件来源于dom,而不是javascript。dom中用户驱动的事件通过一系列树状元素(html/xml)的接口实现与用户的交互,当用户和dom交互的时候就会产生相应的事件。 1.EventEmitter node中不存在dom这个对象,所以他自己创建了EventEmitter类来实现基本的事件功能,node中其他... 阅读全文
posted @ 2012-09-27 17:20 下一站永远 阅读(4325) 评论(1) 推荐(2) 编辑
摘要: 1.异常处理 在我们进行代码开发的时候,异常的捕获处理是一个不能忽略的话题,那么怎么才能捕获到node中的异常呢?或许你最先想到的是try/catch的使用,如下例:var http = require('http')var opts = { host: 'sfnsdkfjdsnk.com', port: 80, path: '/'}try { http.get(opts, function(res) { console.log('Will this get called?') })}catch (e) { console.log 阅读全文
posted @ 2012-09-26 17:23 下一站永远 阅读(3596) 评论(10) 推荐(1) 编辑
摘要: 我们按照执行的方式,把I/O分为串行I/O和并行I/O。串行I/O是完成当前I/O之后,才会去执行下一个I/O。并行I/O要复杂些,但是更容易理解,就是几个I/O同时运行。有一点需要提醒的是,在串行I/O中一般是按照请求队列的顺序来执行请求的,并以这个顺序返回结果。并行I/O返回的结果没有任何的顺序可言。串行I/O和并行I/O可以组合起来工作,例如:有多组并行I/O,每组中包含不同数目的串行I/O。 在Node中我们假设所有的I/O无限延迟的,他们可能执行0到无限的时间,我们不知道也不能假设他们具体的执行时长。与其等待他们执行完毕,我们不如使用基于事件模式,当I/O执行完毕时使用回调函数... 阅读全文
posted @ 2012-09-24 21:10 下一站永远 阅读(2275) 评论(5) 推荐(2) 编辑
摘要: 原文地址:http://blog.163.com/seo_luofeng/blog/static/176575024201151411518277/?suggestedreading&wumii本文将探讨浏览器渲染的loading过程,主要有2个目的:了解浏览器在loading过程中的实现细节,具体都做了什么研究如何根据浏览器的实现原理进行优化,提升页面响应速度由 于loading和parsing是相互交织、错综复杂的,这里面有大量的知识点,为了避免过于发散本文将不会对每个细节都深入研究,而是将重点 放在开发中容易控制的部分(Web前端和Web Server),同时由于浏览器种类繁多且 阅读全文
posted @ 2012-09-24 15:29 下一站永远 阅读(372) 评论(0) 推荐(0) 编辑
摘要: 今天要介绍的是node的事件循环机制,他是一些交互系统的基本概念,他更是javascript语言核心的一部分。因为对于使用浏览器的用户,javascript就是通过处理用户的click,mouse等相关的事件来处理用户的请求的。对于像node这样的服务器来说,事件循环也同样起到相当重要的作用,比如用来处理来自客户端的request请求。下面我们就对node的事件循环做个简单的介绍。 node采用单线程的处理机制,对所有的I/O请求采用非堵塞的工作方式。也就是说,对于http的请求,数据查询,文件的I/O等其他操作,系统不会堵塞当前线程而去等待他直到他返回结果;相反的,他们会立即执行当前请... 阅读全文
posted @ 2012-09-22 16:02 下一站永远 阅读(5439) 评论(0) 推荐(2) 编辑
摘要: 今天我们来完善twitter应用。首先回到昨天的例子。var express = require('express')var app = express()app.get('/', function(req, res) { res.send('Welcome to Node Twitter')})app.listen(8000) 这里我们使用express模块来代替第一讲中使用的http模块,但其实express底层仍然使用到了http模块,它会帮我们完成服务器的创建和监听。完成express实例的创建之后,我们需要监听请求事件,这里我们使用ge 阅读全文
posted @ 2012-09-22 12:03 下一站永远 阅读(2939) 评论(1) 推荐(1) 编辑
摘要: 今天带来的例子是如何创建一个类似于twitter的应用程序。 准备工作: 首先我们需要安装express模块,他是node开发web应用的mvc框架。安装express很简单,是使用npm命令(Node Package Manager)。点【开始】菜单,选择【所有程序】,找到【Node.js (x86)】,运行【Node.js command prompt】。命令行输入如下命令:npm install express回车:然后我们还需要安装jade模块: 现在还没有结束,找到你下载的express和jade文件,目录如下:C:\Users\XXXXXX\node_modules复制n... 阅读全文
posted @ 2012-09-20 14:27 下一站永远 阅读(3106) 评论(4) 推荐(2) 编辑
摘要: 这篇文章将通过开发一个简单聊天室的方式,介绍node.js的net模块。 一、第一版,只向客户端发送信息 我们先实现一个简单的版本,代码如下:var net=require('net');var chatServer=net.createServer();chatServer.on('connection',function(client){ client.write('hi!\n'); client.write('bye!\n'); client.end();})chatServer.listen(9001); 代码讲解: 1. 阅读全文
posted @ 2012-09-20 12:11 下一站永远 阅读(8380) 评论(12) 推荐(7) 编辑
摘要: 从今天开始,我将开始一个关于node.js的专题,是我读《node:up and running》的总结。第一课是关于node.js的安装,开发工具的介绍,以及如何创建我们的第一个服务:hello word。 window平台的node.js安装很简单,大家到http://nodejs.org/下载安装文件,直接安装就可。 开发工具推荐大家使用WebStorm,多node.js的支持相当的好。大家可以读的博文http://www.cnblogs.com/softlover/archive/2012/08/19/2646265.html了解这个软件的安装。 我们使用webstorm创建... 阅读全文
posted @ 2012-09-19 17:45 下一站永远 阅读(5682) 评论(20) 推荐(2) 编辑
摘要: demo地址:http://www.mycookingroom.com/geo.html 今天我们将把html5的geolocation结合google maps开发一个小的应用。google maps的api地址:https://developers.google.com/maps/documentation/javascript/?hl=zh-CN。 调用google maps,实现需要添加js引用<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=f 阅读全文
posted @ 2012-09-16 15:29 下一站永远 阅读(2048) 评论(0) 推荐(0) 编辑
摘要: 原文地址:http://www.ibm.com/developerworks/cn/web/1207_wangqf_jsthis/index.html简介:JavaScript 是一种脚本语言,因此被很多人认为是简单易学的。然而情况恰恰相反,JavaScript 支持函数式编程、闭包、基于原型的继承等高级功能。本文仅采撷其中的一例:JavaScript 中的 this 关键字,深入浅出的分析其在不同情况下的含义,形成这种情况的原因以及 Dojo 等 JavaScript 工具中提供的绑定 this 的方法。可以这样说,正确掌握了 JavaScript 中的 this 关键字,才算迈入了 Jav 阅读全文
posted @ 2012-09-10 16:25 下一站永远 阅读(315) 评论(0) 推荐(0) 编辑
摘要: 今天我们的内容是关于如何创建离线web应用,他的好处是可以让浏览器下载我们指定的web资源,这样用户在离线状态下也能正常使用我们的站点。 1.定义Manifest 我们使用manifest列举出需要离线时访问的资源,他本身是一个文本类型的文件,第一行经常是CACHE MANIFEST,然后列举我们需要的资源,每行一个。文件没有固定的命名规则,后缀名也没有要求,唯一的要求就是需要把后缀名在服务器端以text/cache-manifest的MIME类型定义。 如果是iis 7服务器,按照下面的步骤: 1.比如后缀名为.appcache,打开iis7,选择根节点(这样所有站点都会继承配置... 阅读全文
posted @ 2012-09-10 13:04 下一站永远 阅读(4102) 评论(3) 推荐(3) 编辑
摘要: 本节课的内容是介绍web storage,使用它在浏览器里存储键值对的数据,功能上像以前的cookie一样,不过他更好,存储的数据可以更大。有两种类型的web storage:local storage和session storage,他们使用相同的实现机制,只是可见性和生命周期不同。 1.使用local storage 我们使用localStorage对象来访问local storage,他返回Storage对象,Storage用来存储键值对的数据,他有下面一些属性和方法:clear():清楚存储的键值对数据;getItem(<key>):通过key获取value值;key(&l 阅读全文
posted @ 2012-09-07 15:31 下一站永远 阅读(1555) 评论(1) 推荐(0) 编辑
摘要: 今天我们要学习的是使用Geolocation实现定位功能。我们可以通过navigator.geolocation获取Geolocation对象,他提供了下列方法:getCurrentPosition(callback,errorCallback,options):获取当前位置;watchPosition(callback,error,options):开始监控当前位置;clearWatch(id):停止监控当前位置。 note:下面例子使用的浏览器是chrome,使用其他浏览器我不能保证运行结果和例子显示的结果一致。 1.获取当前位置 我们将使用getCurrentPosition方... 阅读全文
posted @ 2012-09-07 11:13 下一站永远 阅读(1669) 评论(0) 推荐(0) 编辑
摘要: 本文的内容是关于在html5中如何实现html元素拖拽功能。在html5之前要实现拖拽,需要借助js,现在html5内部就支持了拖拽的功能,但是要实现稍微复杂的功能还是少不了js的帮忙。下面我们看几个例子。 1.创建拖拽对象 我们可以通过draggable属性告诉浏览器,哪些元素需要实现拖拽功能。draggable有三个值:true:元素可以被拖拽;false:元素不能被拖拽;auto:浏览器自己判断元素是否能被拖拽。 系统默认值是auto,但auto情况下浏览器对不同元素拖拽功能的支持是不一样,如:支持img对象,不支持div对象。所以,如果需要拖拽一个元素,最好还是把dragga... 阅读全文
posted @ 2012-09-06 21:42 下一站永远 阅读(7501) 评论(1) 推荐(6) 编辑