gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 22:48:31 24 4
gpt4 key购买 nike

在构建 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. 是否社区有什么想法吗?针对这种情况,您采取了哪些措施?

最佳答案

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

您将受益于将 Node.js 与 Web 框架结合使用,例如 Express.js处理繁重的工作。 Express.js 使用另一个模块 Connect.js ,提供路由、配置、模板、静态文件服务等。

您还需要一种模板语言。 EJS例如,为您提供 PHP/JSP 样式的模板语言,而 Jade提供了一种 Haml 式的方法。

探索 Node.js modules page 上的框架和模板引擎列表看看您更喜欢哪一个。

关于node.js - 在 Node.JS 中设计服务器脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5053925/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com