我正在尝试在nodejs中创建静态文件服务器,而不是将其作为完美的服务器,这更多是为了理解节点。我非常了解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);
我的问题是双重的
这是在节点中创建和流式传输基本html等的“正确”方法,还是有更好/更优雅/更可靠的方法?
节点中的.pipe()基本上只是执行以下操作吗?
。
var fileStream = fs.createReadStream(filename); fileStream.on('data', function (data) { res.write(data); }); fileStream.on('end', function() { res.end(); });
感谢大家!
有一个return失踪的语句。
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()