在Node.JS中设计服务器脚本

时间:2011-02-19 22:23:57

标签: node.js

在构建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.社区有什么想法吗?你对这种情况采取了哪些方法?

2 个答案:

答案 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不再是裸机了。使用您选择的框架。至少看看expresssocketstream框架。另请查看socket.io作为AJAX的替代。