2012-08-15 10 views
12

Wenn Skripte von meinem Node.js Server an den Browser, in Google Chrome zu senden, erhalte ich diese Warnung:Wie stelle ich einen MIME-Typ ein, bevor ich eine Datei in Node.js sende?

Ressource als Script interpretiert, sondern mit MIME-Typ text/plain

I übertragen Google hat herumgeklettert und herausgefunden, dass es ein serverseitiges Problem ist, nämlich dass ich denke, dass ich den richtigen MIME-Typ festlegen sollte, bevor ich sie sende. Hier ist der Handler-HTTP-Server:

var handler = function(req, res) 
{ 
    url = convertURL(req.url); //I implemented "virtual directories", ignore this. 

    if (okURL(url)) //If it isn't forbidden (e.g. forbidden/passwd.txt) 
    { 
     fs.readFile (url, function(err, data) 
     { 
      if (err) 
      { 
       res.writeHead(404); 
       return res.end("File not found."); 
      } 

      //I think that I need something here. 
      res.writeHead(200); 
      res.end(data); 
     }); 
    } 
    else //The user is requesting an out-of-bounds file. 
    { 
     res.writeHead(403); 
     return res.end("Forbidden."); 
    } 
} 

Frage: Wie korrigiere ich meinen serverseitigen Code den MIME-Typen korrekt zu konfigurieren?

(Anmerkung: Ich fand schon https://github.com/broofa/node-mime, aber es lässt mich nur den MIME-Typ bestimmen, nicht auf "Set" es.)

Antwort

15

ich es herausgefunden!

Dank @ rdrey der link und this node module ich es geschafft, den MIME-Typ der Antwort richtig eingestellt ist, wie folgt aus:

function handler(req, res) { 
    var url = convertURL(req.url); 

    if (okURL(url)) { 
     fs.readFile(url, function(err, data) { 
      if (err) { 
       res.writeHead(404); 
       return res.end("File not found."); 
      } 

      res.setHeader("Content-Type", mime.lookup(url)); //Solution! 
      res.writeHead(200); 
      res.end(data); 
     }); 
    } else { 
     res.writeHead(403); 
     return res.end("Forbidden."); 
    } 
} 
6

Google-Suche für den Content-Type HTTP-Header.

Dann herauszufinden, wie es eingerichtet mit http://expressjs.com/api.html#res.set

Hoppla, Beispiel Ihre Antwort enthält;)

einfach die Datei überprüfen enden, wenn es .js ist, stellen Sie den entsprechenden MIME-Typ Browser glücklich zu machen.

EDIT: Falls diese reine Knoten ist, ohne ausdrückliche, schau mal hier: http://nodejs.org/api/http.html#http_response_setheader_name_value

+0

Ja, reiner Knoten, kein Express. – corazza

+1

OK, das einzige fehlende Teil ist, dass Sie den MIME-Typ von Skripten herausfinden, den Sie für jede Antwort in den richtigen Header einfügen. – rdrey

+0

Fertig, siehe meine Antwort. :) – corazza

0

Ich hatte Probleme Ihre Handler-Funktion, weil convertURL und okURL Funktionen, wo nicht definiert. Ich änderte den Code ein wenig und fertig aussehen wie dieses

function handler(req, res) 
{ 
    // /home/juan/Documentos/push-api-demo is the path of the root directory of the server 
    var url    = '/home/juan/Documentos/push-api-demo' + req.url; 
    var file_exists  = fs.existsSync(url); 

    if (file_exists) 
    { 
     fs.readFile(url, function(err, data) 
     { 
      if (err) 
      { 
       res.writeHead(404); 
       return res.end("File not found."); 
      } 

      res.setHeader("Content-Type", mime.lookup(url)); 
      res.writeHead(200); 
      res.end(data); 
     }); 
    } 
    else 
    { 
     res.writeHead(403); 
     return res.end("Forbidden."); 
    } 
} 
0

mime.lookup() jetzt mime.getType() umbenannt. So können Sie das tun:

res.set('Content-Type', mime.getType('path/file')); 
Verwandte Themen