7

首先:我没有使用 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 不正确的路径问题

4

2 回答 2

8

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

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

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

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

于 2013-08-02T00:58:52.730 回答
1

如果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');

上面的代码对我有用。

于 2019-01-12T16:12:48.150 回答