當我做fs.readFile(file...
我得到這個錯誤:Node.js的不正確的路徑問題
{ [Error: ENOENT, open 'foundation/css/normalize.css']
errno: 34,
code: 'ENOENT',
path: 'foundation/css/normalize.css' }
我一定要我的路線相對於它們從鏈接的HTML文件的路徑,或相對於位置運行服務器和路由器的node.js文件?
不,我不使用快遞和「使用快遞」不是一個可以接受的答案。
編輯
@ BenjaminGruenbaum的最後意見。我不確定你的HTTP響應是什麼意思,但是我的代碼邏輯如下所示:我通過URI加載我的index.html,然後在文件readFile
中遞歸地遍歷每個其他鏈接文件。我有一個腳本將其分解,以正確顯示正確的Content-Type
。
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 {
// console.log('NON HTML');
// console.log(pathname);
var file_path = "";
var mimes = {
'css': 'text/css',
'js': 'text/javascript',
'htm': 'text/html',
'html': 'text/html',
'png': 'image/png',
'jpg': 'image/jpg',
'jpeg': 'image/jpeg'
};
// parses the url request for a file and pulls the pathname
var url_request = url.parse(request.url).pathname;
// console.log('URL REQUEST');
// console.log(url_request);
// finds the placement of '.' to determine the extension
var tmp = url_request.lastIndexOf(".");
// determines the extension by uing .substring that takes everything after '.'
var extension = url_request.substring((tmp + 1));
// console.log('EXTENSION');
// console.log(extension);
//set path of static pages
if (extension === 'css' || extension === 'js' || extension === 'htm' || extension === 'html' || extension === 'png' || extension === 'jpg' || extension === 'jpeg'){
// console.log('LOAD STATIC PAGE');
file_path = url_request.replace("/", "");
// console.log(file_path);
// console.log();
}
//load needed pages and static files
fs.readFile(file_path, function (error, data){
if(error){
// console.log("AM I DEAD");
// console.log(error);
// console.log();
response.writeHeader(500, {"Content-Type": "text/html"});
response.write("<h1>FS READ FILE ERROR: Internal Server Error!</h1>");
}
else{
response.writeHeader(200, {"Content-Type": mimes[extension]});
console.log('SHOULD BE SUCCESS')
console.log(mimes[extension]);
// console.log(data);
response.write(data);
}
response.end();
});
response.end();
}
}
exports.route = route;
你可以通過我多少地方有console.log()
告訴我可以跟蹤所有的方式向底部的它失敗在這裏:因爲它太長了評論,我會在這裏包括它
else{
response.writeHeader(200, {"Content-Type": mimes[extension]});
console.log('SHOULD BE SUCCESS')
console.log(mimes[extension]);
// console.log(data);
response.write(data);
}
對於有點草率的縮進,我表示歉意。
最後編輯:
的最終解決這個愚蠢的情況可以在我的以下問題在這裏找到:Node.js - Resource interpreted as Script but transferred with MIME type text/plain
很大程度上得益於@BenjaminGruenbaum的忍受一個小白
謝謝。給我5分鐘,我會試一試。我只是把它放在表達式中,因爲這往往是對任何節點問題的最經常回應。它錯了我的地獄 – JDillon522
我給了它一個旋轉,它沒有工作。我不知道如何用文本表達,但我的文件結構如下:'main_folder/assets/foundation + images + JS'我的節點文件位於JS文件夾中。所以我有我的基礎文件的路徑爲'../ foundation/css/normalize.css'但它仍然不起作用 – JDillon522
讓我們來隔離這個。創建一個名爲server.js的新文件,在同一目錄下創建一個名爲'README'的文件並在其中寫入「Hello World」。所有server.js都在README中調用fs.readFile。現在玩路徑,做'../ dirname/README' - 仍然有效。現在嘗試將自述文件放入新目錄中,然後查看路徑仍然有效。 (順便說一句,我只是在我的盒子裏證實了這一切)。現在,你確信問題不在路徑上試着調試它 - 在終端上打印控制檯日誌並在終端中手動打開它,拼寫錯誤發生在我身上數十次:) –