Để mở file trong file app.js
, bạn cần phải thêm đoạn code để khai báo đường dẫn của các file đó. Dưới đây là ví dụ về cách bạn có thể làm điều này:
const fileRoutes = [
{ path: '/index.html', filePath: 'index.html' },
{ path: '/subfolder/index2.html', filePath: 'subfolder/index2.html' },
{ path: '/otherfolder/another.html', filePath: 'otherfolder/another.html' },
{ path: '/images/logo.png', filePath: 'images/logo.png' },
{ path: '/images/icons/icon.png', filePath: 'images/icons/icon.png' },
// Thêm các đối tượng khác tương ứng với các file PNG khác từ các folder khác nhau
];
const server = http.createServer((req, res) => {
const parsedURL = url.parse(req.url, true);
const filePath = parsedURL.pathname;
const fileRoute = fileRoutes.find(route => route.path === filePath);
if (fileRoute) {
const fileFullPath = path.join(__dirname, fileRoute.filePath);
const fileExtension = path.extname(fileFullPath);
const contentType = getContentType(fileExtension);
fs.readFile(fileFullPath, (err, content) => {
if (err) {
res.writeHead(500);
res.end('Internal Server Error');
} else {
res.writeHead(200, { 'Content-Type': contentType });
res.end(content);
}
});
} else {
res.writeHead(404);
res.end('File Not Found');
}
});
function getContentType(fileExtension) {
switch (fileExtension) {
case '.html':
return 'text/html';
case '.png':
return 'image/png';
// Thêm các kiểu MIME khác tương ứng với các định dạng file khác
default:
return 'application/octet-stream';
}
}
Trong ví dụ trên, chúng ta đã thêm các đối tượng trong fileRoutes
để xử lý các file từ các folder khác nhau. Đồng thời, chúng ta đã bổ sung hàm getContentType
để xác định kiểu MIME của các file tương ứng, bao gồm cả file PNG.
Lưu ý rằng chúng ta đã sử dụng hàm getContentType
để xác định kiểu MIME của file dựa trên phần mở rộng của file (fileExtension
). Bạn có thể bổ sung các kiểu MIME khác trong hàm này tùy thuộc vào các định dạng file bạn muốn hỗ trợ.
Cách khai báo các kiểu MIME thông dụng khác
file .webmanifest
như sau:
case '.jpg':
return 'image/jpeg';
case '.webmanifest': return 'application/manifest+json'; case '.eot':
return 'application/vnd.ms-fontobject';
case '.svg':
return 'image/svg+xml';
Digital Marketing Specialist