【问题标题】:Node.js - Resource interpreted as Script but transferred with MIME type text/plainNode.js - 资源被解释为脚本,但使用 MIME 类型 text/plain 传输
【发布时间】:2013-08-03 02:58:51
【问题描述】:

首先:我没有使用 Express。

除此之外,当我加载我的 index.html 文件时,它会递归地 readFile 每个附加的文件,例如我的 CSS 和 JS 页面。但它总是在我的检查器(Chrome)中返回此错误:

资源解释为脚本,但以 MIME 类型 text/plain 传输

我完全不知道它为什么这样做。这是我的代码:

var http = require('http');
var querystring = require('querystring');
var fs = require('fs');
var url = require('url');

function route(handle, pathname, response, request){
console.log("About to route a request for " + pathname);

if (typeof handle[pathname] === "function"){        
    handle[pathname](response, request);
    } else {

    var file_path = "";

    // parses the url request for a file and pulls the pathname
    var url_request = url.parse(request.url).pathname;      
    var tmp  = url_request.lastIndexOf(".");
    var extension  = url_request.substring((tmp + 1));

    file_path = url_request.replace("/", "");

    //load needed pages and static files
    fs.readFile(file_path, function (error, contents){
        if(error){
          console.log('DIE!');
          console.log(error);
          response.writeHeader(500, {"Content-Type": "text/html"});  
          response.end("<h1>FS READ FILE ERROR: Internal Server Error!</h1>");    
        }
        else{ 
          console.log('SUCCESS!');
          // set content type
          if (extension === 'html') response.writeHeader(200, {"Content-Type": 'text/html'});
          else if (extension === 'htm') response.writeHeader(200, {"Content-Type": 'text/html'});
          else if (extension === 'css') response.writeHeader(200, {"Content-Type": 'text/css'});
          else if (extension === 'js') response.writeHeader(200, {"Content-Type": 'text/javascript'});
          else if (extension === 'png') response.writeHeader(200, {"Content-Type": 'image/png'});
          else if (extension === 'jpg') response.writeHeader(200, {"Content-Type": 'image/jpg'});
          else if (extension === 'jpeg') response.writeHeader(200, {"Content-Type": 'image/jpeg'});
          else { console.log("NO CORRECT EXTENSION")};
            console.log(extension);
            response.end(contents);
        }

        response.end();  
    });
    response.end();
}
}

exports.route = route;

我该如何解决这个问题?这已经停止了我的项目。

注意:这是我之前在这里谈到的一个问题的进展:Node.js incorrect path problems

【问题讨论】:

  • 首先,它是writeHead,而不是writeHeader。接下来——哎呀,那个if。你应该使用一个对象。 response.writeHead(200, {'Content-Type': mimeTypes[extension]});.
  • writeHead 很好。但至于哑剧,请参阅我之前的问题stackoverflow.com/questions/18004512/… 这就是我最初的方式。它没有任何区别。这是我的第二次重大迭代。
  • 你试过直接访问脚本网址吗?有用吗?
  • 是的,它正确地处理了一切(如果这就是你的意思)。从那个愚蠢的错误中我可以看出,它以正确的方式读取它,但随后把床弄得一团糟,并决定改变它。
  • 为什么最后一个 response.end() 语句在那里?这不会在 fs.readFile 完成之前关闭响应吗?

标签: node.js google-chrome


【解决方案1】:

尝试注释掉最后一个 response.end。不要认为你需要它。

    response.end();  
    });
    // response.end();
   }
   exports.route = route;

我怀疑 response.end 在 fs.readfile 回调有时间执行之前立即被调用,可能会关闭服务器上的标头而不提供正确的标头 "Content-Type": 'text/javascript '有机会被发送..

在你的代码上试过,对我有用..

【讨论】:

  • 是的,就是这样。 FML 我已经盯着这个看了六个多小时。谢谢大佬
  • 谢谢你们。它对我有帮助
【解决方案2】:

如果 nodejs 并使用 express 下面的代码对我有用

      if (extension === 'html') res.set("Content-Type": 'text/html');
      else if (extension === 'htm') res.set("Content-Type": 'text/html');
      else if (extension === 'css') res.set("Content-Type": 'text/css');
      else if (extension === 'js') res.set("Content-Type": 'text/javascript');
      else if (extension === 'png') res.set("Content-Type": 'image/png');
      else if (extension === 'jpg') res.set("Content-Type": 'image/jpg');
      else if (extension === 'jpeg') res.set("Content-Type": 'image/jpeg');

以上代码适用于我。

【讨论】:

    猜你喜欢
    • 2020-05-06
    • 2011-07-18
    • 2012-08-13
    • 2013-06-17
    • 2013-09-19
    • 2012-06-18
    • 2018-03-19
    • 2012-11-23
    • 2014-07-12
    相关资源
    最近更新 更多