node.js
taocp吧
全部回复
仅看楼主
level 9
ZHRMGHG2050 楼主
2012年05月14日 08点05分 1
level 9
ZHRMGHG2050 楼主
Node.js
is a software system designed for writing scalable Internet applications, notably web servers.Programs are written in JavaScript, using event-driven, asynchronous I/O to minimize overhead and maximize scalability
Node.js consists of Google's V8 JavaScript engine, libUV plus several built-in libraries.
// 很好,很强大
2012年05月14日 08点05分 2
level 9
ZHRMGHG2050 楼主
Node.js was created by Ryan Dahl starting in 2009, and its growth is sponsored by Joyent, his employer.
Dahl's original goal was to create the ability to make web sites with push capabilities as seen in web applications like Google Mail. After trying solutions in several other programming languages he chose JavaScript because of the lack of an existing I/O API. This allowed him to define a convention of non-blocking, event-driven I/O.
Similar environments written in other programming languages include Twisted for Python, Perl Object Environment for Perl, libevent forC and EventMachine for Ruby. Unlike most JavaScript programs, it is not executed in a web browser, but is instead a server-side JavaScript application. Node.js implements some CommonJS specifications.It provides a REPL environment for interactive testing.
Node.js was selected by InfoWorld for the "Technology of the Year Award" in 2012.
2012年05月14日 08点05分 3
level 9
ZHRMGHG2050 楼主
hello,world example:
var http = require('http');
http.createServer(function (request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.end('Hello World\n');
}).listen(8000);
console.log('Server running at http://localhost:8000/');

2012年05月14日 08点05分 4
level 9
ZHRMGHG2050 楼主
2012年05月14日 08点05分 5
level 9
ZHRMGHG2050 楼主
2012年05月14日 09点05分 6
level 9
ZHRMGHG2050 楼主
Node.js,服务器端javascript脚本,现在虽然还不大清楚它功能到底有多强,不过,至少,开发简单的web应用,不用安装php,不用安装apache;仅仅玩一下,应该也不错,^_^、、[撒花]
2012年05月14日 09点05分 7
level 9
ZHRMGHG2050 楼主
node.js 安装:
(1)windows下直接下载.msi文件,然后,你懂滴,next -> next -> finished!
(2)linux下直接下载node-x.y.z.tar.gz文件,解压缩
tar zxvf node-x.y.z.tar.gz
切换到压缩目录,运行命令:
./configure
make
sudo make install
基本就ok了、、
2012年05月14日 10点05分 8
level 9
ZHRMGHG2050 楼主
V8 JavaScript Engine
V8 is Google's open source JavaScript engine.
V8 is written in C++ and is used in Google Chrome, the open source browser from Google.
V8 implements ECMAScript as specified in ECMA-262, 5th edition, and runs on Windows (X****ewer), Mac OS X (10.5 or newer), and Linux systems that use IA-32, x64, or ARM processors.
V8 can run standalone, or can be embedded into any C++ application.
2012年05月14日 10点05分 9
level 9
ZHRMGHG2050 楼主
刚完成scrot的安装,截张linux下的图:
2012年05月14日 12点05分 10
level 9
ZHRMGHG2050 楼主
程序结构
四个文件构成,index.js, server.js, router.js, handler.js
server.js 负责创建启动服务器server;
router.js 负责路由算法,实际是根据url寻到相应的处理器handler;
handler.js 负责事件处理,是一系列handler;
index.js 则像是main函数,里面有路由表rtable数据,并负责启动server;

2012年05月15日 02点05分 12
level 9
ZHRMGHG2050 楼主
效果截图

2012年05月15日 02点05分 14
level 9
ZHRMGHG2050 楼主

// index.js
var server = require("./server"); // 服务器,server
var router = require("./router"); // 路由器,route
rvar handler = require("./handler"); // 事件处理器,handler
var rtable = {}; // 路由表,rtable
rtable["/"] = handler.root; // 显示根目录内容
rtable["/find"] = handler.find; // find命令
rtable["/start"] = handler.start; // 开始页面
rtable["/upload"] = handler.upload; // 图像文件上传
rtable["/show"] = handler.show; // 图像文件显示
rtable["/showtext"] = handler.showtext; // 显示文本
server.start(router.route, rtable); // 启动服务

2012年05月15日 02点05分 15
level 9
ZHRMGHG2050 楼主
// router.js
function route(rtable, pathname, response, request) { // 路由算法
console.log("About to route a request for " + pathname);
if (typeof rtable[pathname] === 'function') { // 查找路由表,存在的话
rtable[pathname](response, request);
} else { // 不存在指定路由
console.log("No request handler found for " + pathname);
response.writeHead(404, {"Content-Type": "text/html;charset=utf-8"});
response.write("404 Not found;你找的文件不存在!");
response.end();
}
}
exports.route = route;

2012年05月15日 02点05分 16
level 9
ZHRMGHG2050 楼主
// server.js
var http = require("http");
var url = require("url");
function start(route, rtable) { // server启动函数,route为路由算法,rtable是路由表
http.createServer(onRequest).listen(8888); // 创建服务器,打开指定的监听端口
console.log("Server has started and listening port is 8888.");
function onRequest(request, response) { // 请求响应函数
var pathname = url.parse(request.url).pathname; // 解析url
console.log("Request for " + pathname + " received.");
//request.setEncoding("utf8"); // 设置请求数据的编码格式,utfs8
route(rtable, pathname, response, request); // 响应请求
}
}
exports.start = start;

2012年05月15日 02点05分 17
level 9
ZHRMGHG2050 楼主
[揉脸]贴吧果然么发贴代码,,完全无格式、、
还要提一下的是,因为用到了NodeJS的formidable模块,需要安装,命令:
npm install formidable

2012年05月15日 02点05分 19
level 9
ZHRMGHG2050 楼主
Just what is Node.js? 上的一个获取随机数的例子:
网址:http://www.ibm.com/developerworks/opensource/library/os-nodejs/index.html
代码(去掉了大部分注释)

2012年05月15日 03点05分 20
level 9
ZHRMGHG2050 楼主
代码(去掉了大部分注释,端口改成了8888):
var http = require("http");
var url = require("url");
http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
var params = url.parse(request.url, true).query;
var input = params.number;
var numInput = new Number(input);
var numOutput = new Number(Math.random() * numInput).toFixed(0);
// Write the random number to response
response.write(numOutput);
response.end();
}).listen(8888);
console.log("Random Number Generator Running...");
浏览器中敲入:http://localhost:8888/?number=1234
刷新页面,可以得到0~1234间的不同的随机数
2012年05月15日 03点05分 22
level 9
ZHRMGHG2050 楼主
Timers
timeoutId = setTimeout(callback, delay, [arg], [...]);
clearTimeout(timeoutId);
timeoutId = setInterval(callback, delay, [arg], [...]);
clearInterval(intervalId);
// 设定超时或是定时器,比较有用的函数,文档说,回调函数的执行不一定和设定的的时间精确相等、、
2012年05月21日 16点05分 24
level 9
ZHRMGHG2050 楼主
(8)util.inspect(object, [showHidden], [depth], [colors])
Return a string representation of object, which is useful for debugging.
(9)util.pump(readableStream, writableStream, [callback])
Experimental
Read the data from readableStream and send it to the writableStream. When writableStream.write(data)returns false readableStream will be paused until the drain event occurs on the writableStream. callback gets an error as its only argument and is called when writableStream is closed or when an error occurs.
(10)util.inherits(constructor, superConstructor)
Inherit the prototype methods from one constructor into another. The prototype of constructor will be set to a new object created from superConstructor.
var util = require("util");
var events = require("events");
function MyStream() {
events.EventEmitter.call(this);
}
util.inherits(MyStream, events.EventEmitter);
MyStream.prototype.write = function(data) {
this.emit("data", data);
}
var stream = new MyStream();
console.log(stream instanceof events.EventEmitter); // true
console.log(MyStream.super_ === events.EventEmitter); // true
stream.on("data", function(data) {
console.log('Received data: "' + data + '"');
})
stream.write("It works!"); // Received data: "It works!

2012年05月21日 16点05分 26
1 2 尾页