2013-08-02 6 views
6

Zunächst einmal: Ich verwende nicht Express.Node.js - Ressource als Skript interpretiert, aber mit MIME-Typ übergeben text/plain

Mit diesem aus dem Weg, wenn ich meine index.html Datei rekursiv readFile jede angehängte Datei wie meine CSS und JS Seiten laden. Aber es gibt immer diesen Fehler in meinem Inspektoren (Chrom):

Ressource als Script interpretiert, sondern mit MIME-Typ Text übertragen/plain

Ich habe absolut keine Ahnung, warum es dies tut. Hier ist mein Code:

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; 

Wie kann ich das beheben? Das hat mein Projekt auf Eis gelegt.

Hinweis: Dies ist ein Fortschreiten von einem früheren Problem, das ich hier die Rede war: Node.js incorrect path problems

+0

Zunächst einmal, es ist 'writeHead', nicht' writeHeader'. Weiter - yikes, das 'if'. Sie sollten ein Objekt verwenden. 'response.writeHead (200, {'Inhaltstyp': mimeTypes [Erweiterung]});'. – Ryan

+0

Guter Fang auf dem 'writeHead'. Aber was den Pantomime angeht, siehe meine vorherige Frage unter http://stackoverflow.com/questions/18004512/node-js-incorrect-path-problems/18004553?noredirect=1#comment26330812_18004553 So hatte ich es ursprünglich. Es machte keinen Unterschied. Dies ist meine zweite große Wiederholung. – JDillon522

+0

Haben Sie versucht, die Skript-URL direkt zu besuchen? Funktioniert es? – Ryan

Antwort

7

Versuchen Sie, dass im letzten Response.End Kommentar aus. Glaube nicht, dass du es brauchst.

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

Ich vermute, dass Response.End sofort aufgerufen wird vor Ende der eine in dem fs.readfile Rückruf hat vielleicht Zeit auszuführen, verschließt die Header auf dem Server nicht den richtigen Header „Content-Type“ geben: 'text/javascript' eine Chance, geschickt zu bekommen ..

versucht es auf Ihrem Code, arbeitete für mich ..

+2

Yup, das war es. FML Ich habe das seit über sechs Stunden angestarrt. Danke Mann – JDillon522

+0

Danke Jungs. Es hilft mir –

Verwandte Themen