尝试从nodejs到浏览器IMG标签提供多个图像文件

时间:2012-10-11 17:21:22

标签: javascript node.js

在名为“assets”的目录中大约有10个文件,浏览器主布局中的各种img标签都需要这些文件。

发送10个单独的请求以获取单独的微小图像文件。 (最终我将优化它只是发送一个请求来加载包含所有图像的单个图像表)

但它有时无法加载所有这些,所以浏览器会显示旋转/加载图标多年,直到它超时或加载它们但它们是错误的顺序/匹配(img标记将显示错误的图像)或它只是没有加载图像,每次刷新页面时都会有不同的行为

//first request gzips and loads the main layout, subsequent requests loads images

require('fs').readFile('assets/'+params.file, function(err, data) {
  if(err) throw err;
  if(params.file == 'layout.html') {
  require('zlib').gzip(data, function(err, buffer) {
    if(err) throw err;
    output(buffer, params);        
   });
  } else output(data, params);
});


function output(data, params){ 
  switch(params.file.substring(params.file.length-3)) {
    case 'tml': params.headers = {'Content-Encoding': 'gzip'};break;
    case 'ico': params.headers = {'Content-Type': 'image/x-icon'};break;
    case 'ttf': params.headers = {'Content-Type': 'application/x-font-ttf' }; break;
    case 'otf': params.headers = {'Content-Type':'font/opentype'};break;
    case 'png': params.headers = {'Content-Type':'image/png'};break;
    case 'gif': params.headers = {'Content-Type':'image/gif'};break;
    case 'peg':
    case 'jpg': params.headers = {'Content-Type':'image/jpeg'};break;
    default: params.headers = {};
  }
  params.headers['Set-Cookie'] =  '';       
  params.responseOutput(data, params);
}

这感觉有点像那些讨厌的“关闭”问题,但是这里没有forloops,浏览器的每个图像请求都不应该干扰另一个(..然而它是)

1 个答案:

答案 0 :(得分:1)

某些请求有时会提供错误的文件这一事实表明您确实存在关闭问题,最有可能在执行paramsreadfile回调之前更改gzip。它的范围是什么以及如何构造它(另一种可能性是params本身是适当的范围,但它包含对不是的东西的引用?