首先:我没有使用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
答案 0 :(得分:8)
尝试注释掉最后一个响应。不要以为你需要它。
response.end();
});
// response.end();
}
exports.route = route;
我怀疑在fs.readfile回调中的一个回调有时间执行之前会立即调用response.end,可能关闭服务器上的标题而没有给出正确的标题“Content-Type”:'text / javascript '有机会被送去..
在你的代码上试过,为我工作..
答案 1 :(得分:0)
如果 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');
上面的代码对我有效。