NodeJS中的基本静态文件服务器

我正在尝试在nodejs中创建静态文件服务器" title="文件服务器">文件服务器,而不是将其作为完美的服务器,这更多是为了理解节点。我非常了解Connect和node-

static之类的项目,并且完全打算将这些库用于更多可用于生产的代码,但我也想了解我正在使用的基础知识。考虑到这一点,我编写了一个小的server.js:

var http = require('http'),

url = require('url'),

path = require('path'),

fs = require('fs');

var mimeTypes = {

"html": "text/html",

"jpeg": "image/jpeg",

"jpg": "image/jpeg",

"png": "image/png",

"js": "text/javascript",

"css": "text/css"};

http.createServer(function(req, res) {

var uri = url.parse(req.url).pathname;

var filename = path.join(process.cwd(), uri);

path.exists(filename, function(exists) {

if(!exists) {

console.log("not exists: " + filename);

res.writeHead(200, {'Content-Type': 'text/plain'});

res.write('404 Not Found\n');

res.end();

}

var mimeType = mimeTypes[path.extname(filename).split(".")[1]];

res.writeHead(200, mimeType);

var fileStream = fs.createReadStream(filename);

fileStream.pipe(res);

}); //end path.exists

}).listen(1337);

我的问题是双重的

  1. 这是在节点中创建和流式传输基本html等的“正确”方法,还是有更好/更优雅/更可靠的方法?

  2. 节点中的.pipe()基本上只是执行以下操作吗?

var fileStream = fs.createReadStream(filename);

fileStream.on('data', function (data) {

res.write(data);

});

fileStream.on('end', function() {

res.end();

});

感谢大家!

回答:

  • 基本服务器看起来不错,除了:

有一个return失踪的语句。

    res.write('404 Not Found\n');

res.end();

return; // <- Don't forget to return here !!

和:

res.writeHead(200, mimeType);

应该:

res.writeHead(200, {'Content-Type':mimeType});

  • 是的pipe(),基本上是这样做的,它还会暂停/恢复源流(以防接收器变慢)。这是该pipe()函数的源代码:https : //github.com/joyent/node/blob/master/lib/stream.js

以上是 NodeJS中的基本静态文件服务器 的全部内容, 来源链接: utcz.com/qa/411954.html

回到顶部