【发布时间】: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