在Node.JS中devise一个服务器脚本

我试图找出构造nodeJS服务器对象的一些简单的最佳实践。 请注意,我是来自LAMP背景,所以整个事情对我来说都是一种范式转变。


静态内容

静态内容有文件logging的例子,像一个魅力:

var http = require('http'), url = require('url'), fs = require('fs'), sys = require(process.binding('natives').util ? 'util' : 'sys'); server = http.createServer(function(req, res){ var parsedURL = url.parse(req.url, true); var path = parsedURL.pathname; var query = parsedURL.query; switch (path){ case '/': res.writeHead(200, {'Content-Type': 'text/html'}); res.write('<h1>Greetings!</h1>'); res.end(); break; default: fs.readFile(__dirname + path, function(err, data){ if (err) return send404(res); res.writeHead(200, {'Content-Type':'text/html'}) res.write(data, 'utf8'); res.end(); }); } }).listen(80); send404 = function(res){ res.writeHead(404); res.write('404'); res.end(); }; 

服务器侦听请求,查找文件,并将这些文件的内容发送回客户端。 很明显,我给出的例子是非常愚蠢的,并没有考虑到不是text / html文件,但是你明白了。


dynamic内容

但是如果我们不想提供静态内容呢? 举个例子,如果我们想要一个hello世界文件,它接受来自查询string的一个值并作出不同的响应。

我的第一个猜测是,我应该使用nodeJS模块设置创build第二个文件,给它一些模块方法,它接收信息,并串联一个垃圾负载的string在一起。

例如,一个名为hello.js的hello世界模块:

 exports.helloResponse = function( userName ) { var h = "<html>"; h += "<head><title>Hello</title></head>"; h += "<body>Hello, " + userName +"</body>"; h += "</html>"; } 

然后将以下情况添加到服务器处理程序:

 case 'hello': res.writeHead(200, {'Content-Type':'text/html'}) res.write(require("./hello.js").helloResponse(query["userName"]), 'utf8'); res.end(); 

我对模块没问题,但是我讨厌这个事实,我必须在javascript中创build一个巨大的连接string。 SO社区有什么想法吗? 你有什么办法来处理这种情况?

Node.js是一个“裸机”平台(与Python或Ruby不同),这使得它非常灵活。

您将使用Node.js和Express.js等Web框架来处理繁琐的工作。 Express.js使用另一个模块Connect.js来提供路由,configuration,模板,静态文件服务等等。

你也会想要一个模板语言。 例如, EJS为您提供了PHP / JSP风格的模板语言,而Jade则提供了Haml风格的方法。

浏览Node.js模块页面上的框架和模板引擎列表,看看你喜欢哪一个。

Node.js不再是光秃秃的骨头了。 使用你select的框架。 至less在expresssocketstream框架看看。 另外看看socket.io作为AJAX的替代品。