ฉันกำลังพยายามสร้างเซิร์ฟเวอร์ไฟล์แบบคงที่ใน nodejs มากขึ้นเพื่อเป็นการออกกำลังกายเพื่อทำความเข้าใจโหนดมากกว่าเซิร์ฟเวอร์ที่สมบูรณ์แบบ ฉันทราบดีเกี่ยวกับโปรเจ็กต์เช่น Connect และ node-static และตั้งใจอย่างเต็มที่ที่จะใช้ไลบรารีเหล่านั้นสำหรับโค้ดที่พร้อมใช้งานจริงมากขึ้น แต่ฉันก็อยากเข้าใจพื้นฐานของสิ่งที่ฉันกำลังทำงานด้วย ด้วยเหตุนี้ฉันจึงเขียนโค้ดเซิร์ฟเวอร์ขนาดเล็ก 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();
});
ขอบคุณทุกคน!