摸石头——Node.Js(二)
来源:互联网 发布:外国人的聊天软件 编辑:程序博客网 时间:2024/06/07 04:53
Node.js 正在快速发展,有广阔的应用前景,不过文档和参考资料也不是十分完备。这个系列其实就是我的读书笔记了。我学习的方式基本上是鲸吞和试验两大法宝。这两个法宝很有效,但同时也耗费很大的时间和精力。所以,希望把自己趟过的路,插上路标,帮助童鞋们节约点时间。
上回说道:在 Windows 平台(本系列都是基于Windows平台,后面就不再注明了),node.js 可以精简到一个可执行文件,运行这个文件,我们就得到了一个控制台,在这个控制台,我们可以以 REPL (Read-Eval-Print-Loop) 的方式交互的执行js代码。
一、批量执行代码
好,顺理成章的下一个问题就是:如何批量执行 js 代码呢?回答是可以将 js 代码放进一个文件,然后将文件的路径作为参数告诉 node.exe 文件就可以了。就象 Java 执行一段代码一样。(粗体是我们键入内容,下同)
d: \myNodeJsDemo>node index.js
一个比较容易犯的错误就是键入 node 后回车,已经进入了 REPL 环境再执行上诉内容,那么你会得到新一行的三个点“…”,告诉你 node.js 在等待你完成 js 代码。你可以按 <ctrl>d退出 REPL 环境,在系统提示符下重来就可以了。
REPL 环境下,如果遇到连续的“…”,想放弃录入退回到 REPL 提示符,可以按 <ctrl>C,鉴于 js 复杂的嵌套,我想这是会经常遇到的。
二、前端呢?还是后端?这是个问题。
在大家的印象中,Javascript 很少逃出浏览器的五指山,所以,估计您和我一样,第一次接触到 Node.js 这个名字时,会误以为是一个新的前端框架。咱们误会人家人家了,Node.js 诞生的目的是为了建立服务器端应用的。所以,这个摸石头系列我们有两个任务要完成:
1、建立一个简单的静态web服务器。
2、架一个聊天室。
注意,以上两个任务只能使用 node.js 及其第三方模块,不可使用IIS、Apahe、Nginx等Web服务器。想一想,如果使用c、c++、java、c#等来实现,这两个任务够您忙活一下的吧。
而使用 node.js 来实现,你可以用两行代码就实现第一个任务。怎么样,期待吧,嘿嘿。
三、模块模块
学 C 语言的时候大家都明白,没有 stdio.h ,连最简单的屏幕打印都没法做。任何语言,失去了强大类库的支持,都会变的弱弱的。或者,换一个角度,任何成熟的语言,都是采用把强大的功能打包成类库的方式,实现语言的高扩展的。
现在明白为什么 Javascript 总是那么弱不禁风的样子了吗?嗯,就是因为缺少强大的类库啊。所以,一帮大牛开始考虑干这件事了,这个项目就是 CommonJS 。CommonJS 希望实现一个 Javascript 标准类库(或者说,定义了一套标准),使开发者能够利用 Javascirpt 来开发下列类型的应用:
1、服务器端应用;
2、命令行工具;
3、桌面基于 GUI 应用
4、混合应用(Titanium, Adobe AIR)
node.js 是 Common.JS 的实现者之一。好了,require 函数该出场了。在 CommonJS 规范中,使用这个函数来引入别的模块,说白了,就和 include(C) 、 import(JAVA) 、 using (C#) 等类似。比如,node.js 内置了个模块,专门帮助我们实现 http 服务。我们只需要:
var http = require(‘http’);
就可以开始使用该模块的功能了。截止2012年12月19日,node.js 官网现在已经注册了 5747 个第三方模块。安装这些模块也非常的简单,不过,还是先来完成任务一吧。
四、HTTP 服务之 Hello World
如果我说只用两行代码就实现一个 http 服务器,您不会用鸡蛋砸我吧?等,等等…… @#$*@(@!_#
实在要砸我,鸡蛋多浪费,换成小妹妹的香包什么的多好。
好吧,第一句上面我们已经写出来了。下面看完整代码!砸我!
//最简单 node.js http 服务器
//引入模块
var
http = require('http);
//创建一个服务并启动他
http.createServer().listen();
好了,任务完成,保存成 app.js 文件,并用:node app.js 运行吧。现在你可以用浏览器访问了,地址是:http://localhost 。什么?浏览器什么反应都没有?控制台也只有光标在闪啊闪?嗯,咱们换个端口吧,默认的80端口往往和我们其他的 web 服务有冲突:
var
http = require(
'http'
);
//换成在888端口监听
http.createServer().listen(888);
相应的,访问地址也需要换一下:http://localhost:888 。还是没反应?好吧,为了说服你我们的服务器已经完美的在工作了,告诉你一个小秘密吧。http.createServer 其实是可以带参数的。你也知道,js 是个很自由的语言,参数是可以省略的,所以我就省略了。而且,你也知道, js 自由到可以用函数来做参数,嗯,您猜对了,http.createServer 的参数确实应该是一个函数。这个函数在每次有 http 请求进来的时候就会跑一遍,也就是说,您每用浏览器访问一次上面的地址,我们传进去的函数就运行一遍。OK,上试验:
var
http = require(
'http'
);
http.createServer(
//这里我们传进一个函数做参数
tellme
).listen(888);
//请求进来时候执行的代码
function
tellme(){
//在后台控制台提示有访问进来了。
console.log(
'I receive a quest.'
);
}
好,现在再访问试试。浏览器还是什么都没有。不过,每次我们刷新浏览器,后台都会告诉我们访问进来了。
好了,回家吃饭。后面内容,放第三篇唠叨吧。
- 摸石头——Node.Js(二)
- 摸石头——Node.Js(三)
- 摸石头——NOde.js(四)
- 摸石头——Node.Js(五)
- 摸石头——Node.Js(六)
- 摸石头——Node.js (一)
- 摸石头——Node.Js(七)
- Node.js 的安装和控制台命令——Node.js摸石头系列
- WebSocket 一场Web 通讯革命悄然来临——Node.js摸石头系列之五
- Node.js(二)
- Node.js学习(二)——Node.js连接mysql数据库
- Node.js学习笔记(二)—— 模块化
- 学习记录——node.js(二)
- Node.js入门(二)——简单读写文件
- 学习node.js(二)—— Buffer
- Node.js基础(二)
- node.js基础知识(二)
- node.js基础(二)
- CGAffineTransformMakeTranslation, CGAffineTransformTranslate, CGAffineTransformIdentity
- python学习-异常
- python 处理HTML转义字符
- 解决DBCP和C3P0针对mysql数据库8小时释放链接的问题
- swt绘图练习
- 摸石头——Node.Js(二)
- python学习-文件操作
- __int64 与long long 的区别
- foreach循环中获取每行每单元格数据
- UILabel的用法
- Java Servlet Specification 3.0 之 第七章 之 Sessions
- 如何把pdf转换成excel
- 简要分析汽车的电子控制单元的主要作用是什么
- 分页查询