Không mở được file khi nhập link trên web browser / ô search dẫn tới 1 file trên nodejs hosting

Để 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';
Rate this post

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *