在构建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();
};
Run Code Online (Sandbox Code Playgroud)
服务器侦听请求,查找文件,并将这些文件的内容发送回客户端.显然我给出的例子非常愚蠢,并没有考虑不是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>";
}
Run Code Online (Sandbox Code Playgroud)
然后将以下案例添加到服务器处理程序:
case 'hello':
res.writeHead(200, {'Content-Type':'text/html'})
res.write(require("./hello.js").helloResponse(query["userName"]), 'utf8');
res.end();
Run Code Online (Sandbox Code Playgroud)
我对模块很满意,但我讨厌我必须在javascript中创建一个巨大的连接字符串.SO社区有什么想法吗?您对这种情况采取了哪些方法?
Node.js是一个"裸骨"平台(与Python或Ruby不同),这使得它非常灵活.
您将受益于将Node.js与Express.js等Web框架一起使用来处理繁琐的工作.Express.js使用另一个模块Connect.js来提供路由,配置,模板,静态文件服务等.
您还需要一种模板语言.例如,EJS为您提供了一种PHP/JSP风格的模板语言,而Jade提供了一种Haml-esque方法.
浏览Node.js模块页面上的框架和模板引擎列表,看看您喜欢哪个.
| 归档时间: |
|
| 查看次数: |
2150 次 |
| 最近记录: |