在构建nodeJS服务器对象时,我试图找出一些简单的最佳实践。请注意,我来自LAMP背景,所以整个事情对我来说都是一种范式转换。
静态内容
静态内容已经记录了示例,并且像魅力一样:
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文件,该文件从查询字符串中获取值并以不同方式响应,那该怎么办呢?
我的第一个猜测是我应该使用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.社区有什么想法吗?你对这种情况采取了哪些方法?
答案 0 :(得分:5)
Node.js是一个“裸骨”平台(与Python或Ruby不同),这使得它非常灵活。
通过使用带有Express.js等Web框架的Node.js,您将受益于处理繁重的工作。 Express.js使用另一个模块Connect.js来提供路由,配置,模板,静态文件服务等。
您还需要一种模板语言。例如,EJS为您提供了一种PHP / JSP风格的模板语言,而Jade提供了一种Haml-esque方法。
浏览Node.js modules page上的框架和模板引擎列表,看看你喜欢哪个。
答案 1 :(得分:0)
Node.js不再是裸机了。使用您选择的框架。至少看看express
和socketstream
框架。另请查看socket.io
作为AJAX的替代。