简体   繁体   中英

Node.js and undefined properties

I'm trying to use GET variables to transfer some simple data but for some reason I'm doing it wrong.

My code is pretty simple. I use Node.js HTTP & URL libraries. When I try to run following code, I get TypeError: Cannot read property 'foo' of undefined. I really don't understand why because foo is passed in the URL and if I do console.log to q object, there's foo value.

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")

Your problem is not that foo doesn't exist, the problem is that q itself is undefined .

Where does that come from? Well if we clean it up and add some logs...

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");

..we find out that the browser requests:

/bla?foo=1
/favicon.ico

There you go! Of course the favicon request has not GET params, you simply need to check that q is not undefined .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM