当涉及到构造nodeJS服务器对象时,我试图找出一些简单的最佳实践。请注意,我是从一个灯的背景,所以整个事情有点像一个范式的转变对我。
静态内容
静态内容已经记录了示例,并且工作起来很有魅力:
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的文件,但您知道了。
动态内容
但是,如果我们不想提供静态内容呢?例如,如果我们想要一个hello world文件,它接受来自querystring的值,并且响应不同。
我的第一个猜测是,我应该使用nodeJS模块设置创建第二个文件,给它一些接收信息的模块方法,并将大量的字符串连接在一起。
例如,一个名为hello.js的hello world模块:
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中创建一个巨大的级联字符串。S.O.社区有什么想法吗?你对这种情况采取了什么办法?
发布于 2011-02-19 23:50:54
Node.js是一个“基本的”平台(不像Python ),这使得它非常灵活。
您将受益于使用Node.js与web框架(如Express.js )来处理繁重的工作。Express.js使用另一个模块Connect.js来提供路由、配置、模板化、静态文件服务等等。
您还需要模板语言。例如,EJS为您提供了一种PHP/JSP风格的模板语言,而玉石则提供了一种Haml-esque方法。
研究Node.js模块页面上的框架和模板引擎列表,看看您喜欢哪一个。
发布于 2011-10-03 17:36:28
Node.js不再是赤裸的骨头了。使用你选择的框架。至少看看express和socketstream框架。还可以看看socket.io作为AJAX的替代品。
https://stackoverflow.com/questions/5053925
复制相似问题