Tôi đang cố gắng tạo một máy chủ tệp tĩnh trong nodejs giống như một bài tập để hiểu về nút hơn là một máy chủ hoàn hảo. Tôi biết rõ về các dự án như Connect và node-static và hoàn toàn có ý định sử dụng các thư viện đó để có thêm mã sẵn sàng cho sản xuất, nhưng tôi cũng muốn hiểu những điều cơ bản về những gì tôi đang làm việc. Với ý nghĩ đó, tôi đã mã hóa một server.js nhỏ:
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);
Câu hỏi của tôi là gấp đôi
Đây có phải là cách "đúng đắn" để tạo và phát trực tuyến html cơ bản, v.v. trong nút hay có phương pháp tốt hơn / thanh lịch hơn / mạnh mẽ hơn không?
Có phải .pipe () trong nút về cơ bản chỉ thực hiện những việc sau không?
.
var fileStream = fs.createReadStream(filename);
fileStream.on('data', function (data) {
res.write(data);
});
fileStream.on('end', function() {
res.end();
});
Cảm ơn mọi người!