2010-11-25 14 views
1

Ich versuche, GET-Variablen zu verwenden, um einige einfache Daten zu übertragen, aber aus irgendeinem Grund mache ich es falsch.Node.js und undefined Eigenschaften

Mein Code ist ziemlich einfach. Ich benutze Node.js HTTP & URL-Bibliotheken. Wenn ich versuche, folgenden Code auszuführen, erhalte ich TypeError: Die Eigenschaft 'foo' von undefined kann nicht gelesen werden. Ich verstehe wirklich nicht, warum, weil foo in der URL übergeben wird und wenn ich console.log zu q-Objekt, gibt es Foo-Wert.

http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}) 
    var vars = url.parse(req.url,true) 
    var q = vars.query 
    if(q.foo) { 
     res.end('yay') 
    } else res.end('snif') 
}).listen(8000,"127.0.0.1") 

Antwort

4

Ihr Problem ist nicht, dass foo existiert nicht, das Problem ist, dass q selbst undefined ist.

Woher kommt das? Nun, wenn wir es aufzuräumen und fügen Sie einige Protokolle ...

var http = require('http'); 
var url = require('url'); 

http.createServer(function (req, res) { 
    console.log(req.url); 

    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    var vars = url.parse(req.url, true); 
    var q = vars.query; 
    if(q && q.foo) { // this time check that q has a value (or better check that q is an object) 
     res.end('yay'); 

    } else { 
     res.end('snif'); 
    } 
}).listen(8000,"127.0.0.1"); 

..wir herausfinden, dass die Browser-Anfragen:

/bla?foo=1 
/favicon.ico 

Dort gehen Sie! Natürlich hat die Favicon-Anfrage nicht GET params, Sie müssen nur überprüfen, dass q nicht undefined ist.

+0

Aah, natürlich .. favicon Anfrage. Daran habe ich nicht gedacht. Ich habe wirklich nicht viel serverseitiges Javascript mit Node.js gemacht, so dass alle diese kleinen Fehler mich beißen:/ – Mike

+0

Ich hatte etwas ähnliches in einer switch-Anweisung. Die 'url.parse' befand sich außerhalb der switch-Anweisung und einige Fälle (wie ein xml-Format) gaben die Parameter nicht zurück. Als Ergebnis war 'url.parse' in diesen Fällen nicht definiert. – SnapShot

+0

Wird '/ favicon.ico' immer standardmäßig zurückgegeben? Gibt es eine Möglichkeit, es zu vermeiden? – hyprstack

Verwandte Themen