什么是Node.js?

什么是Node.js?(1)

2011-09-02 14:47 李晶 拔赤  字号: T |  T
一键收藏,随时查看,分享好友!

前不久Oreilly出了一本小册子“What is Node?”,扼要的讲解了Node的身世和所适用的场景,作者文笔轻松流畅、内容充实,是非常难得的学习资料。翻译出来,和大家分享~

AD:2013云计算架构师峰会课程资料下载

Node不是万能药!但的确能解决一些关键问题

学习Node不是一件轻松事儿,但你所收到的回报是对得起你的付出的。因为当下Web应用开发中的诸多难题唯有JavaScript才能解决。

目录

  1. 专家们的警告!
  2. Node:几个小例子
  3. Node不是JavaScript,Node可以运行JavaScript
  4. 和Node服务器的交互
  5. 快速入门手册
  6. 解释器之惑
  7. 基于事件的Web应用
  8. Node的用武之地

“你够酷吗?来用我吧!” Node.js 为最新潮的编程语言提供了一系列很酷的API和工具箱,它可以直接应用于传统的Rails、Ajax、Hadoop、甚至可以某种程度上用于iPhone开发和HTML5。如果你参加过一些大型技术会议,你总是会听到一些关于Node.js的主题演讲,尽管这些话题对普通的开发者来说依然有些难以企及。

你可能已经听说Node.js(有时我们将其简称为“Node”)是一个服务器端的解决方案,它可以运行JavaScript,并可以作为Web服务来处理HTTP请求。如果这些东东还不至于让你晕头转向的话,转眼间关于端口、sockets和线程的讨论就又成了当下最热门的话题,你会觉得这些东西让你眼花缭乱。这些内容真的属于JavaScript的范畴吗?为什么世界上那么多人宁愿将JavaScript脱离浏览器而运行,更不用说将JavaScript运行于服务器端了?

好消息是,你所听到的(所想到的)关于Node的一切都是正确的。Node的的确确是属于网络编程的范畴,用以处理服务器端的请求和响应。坏消息是和之前的Rails、Ajax和Hadoop一样,真正实用的技术资料实在太少。等到基于Node的“优秀的”框架成熟之后,技术资料一定会跟得上的,但何必要等到技术书籍和教程都出来之后再去尝试使用Node呢?现在就使用Node,说不定会给你的代码带来意想不到的改观,甚至让你的程序变得更易实现。

专家门的警告!

和大多数技术一样,Node也是新瓶装旧酒:它看起来不透明而且很怪异,但独受小开发团队的青睐。如果你没有接触过Node,则需要学习一些很容易上手的服务器端脚本。你需要化时间来搞清楚Node,因为即便是运行于服务器端的JavaScript,它和客户端JavaScript也极为不同。实际情况是,你不得不自己给自己洗脑,以便重新学习理解围绕JavaScript的事件处理机制、异步IO和一些网络基础知识。

不幸的是,这意味着如果你已经用Node作开发超过两年时间的话,你会觉得这篇文章内容很单调乏而且过于简单。你会开始寻找新的“刺激”,比如将Node运行于客户端,或者开始尝试事件I/O、反射器模式和npm。你会发现Node的世界是如此有趣,甚至很多Node高级技术具有某种史诗般的美感,而这些东西对于初学者来说依然是难于企及的。因此,或许你应该将你掌握的知识分享给你的同伴,尤其是对于那些不了解Node的同学,当他们开始对Node感兴趣时,给他们分享传授Node高级技术。

Node:几个小例子

首先,你应当意识到Node是用于运行独立的JavaScript程序的,而不是运行于浏览器中的某个HTML片段里。它是存放在文件系统中的真实存在的文件,由Node程序执行,以一种守护进程的模式运行,同时打开对某些端口的监听。

跳过 hello world

最经典的例子当然是“Hello World“,在Node官网(http://nodejs.org/docs/latest )上有源码。几乎每个人都是从Hello World开始接触Node的。现在让我们跳过这个最简单的例子,来看一些更有趣的例子:实现一个可以从服务器发送文件到客户端的程序(而不仅仅是发送一段文本到客户端)。

   
   
  1. var sys = require("sys"),  
  2. http = require("http"),  
  3. url = require("url"),  
  4. path = require("path"),  
  5. fs = require("fs");  
  6. http.createServer(function(request, response) {  
  7.     var uri = url.parse(request.url).pathname;  
  8.     var filename = path.join(process.cwd(), uri);  
  9.     path.exists(filename, function(exists) {  
  10.         if(!exists) {  
  11.             response.writeHead(404, {"Content-Type""text/plain"});  
  12.             response.end("404 Not Found\n");  
  13.             return;  
  14.         }  
  15.         fs.readFile(filename, "binary"function(err, file) {  
  16.             if(err) {  
  17.                 response.writeHead(500, {"Content-Type""text/plain"});  
  18.                 response.end(err + "\n");  
  19.                 return;  
  20.             }  
  21.             response.writeHead(200);  
  22.             response.end(file, "binary");  
  23.         });  
  24.     });  
  25. }).listen(8080);  
  26. console.log("Server running at http://localhost:8080/"); 

感谢Mike Amundsen,他给出了这段代码的相似的实现。这个例子是由Devon Govett在Nettuts+上提交的一段代码,尽管已经根据新版本的Node作了更新,但Devon的整个帖子是一个非常好的入门学习教材,对于初学者来说更是如此。

如果你是一个新手,你可以将上述代码保存到一个文本文件中,命名为NodeFileServer.js。在运行之前你需要一个Node运行环境,最新的Node版本可以从官网下载这个文件或者从github上将源码取下来。你需要编译源码,如果你没有用过Unix、对make和configure不甚熟悉,则需要查阅在线编译手册来寻求帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值