Reputation: 113
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")
Upvotes: 1
Views: 5108
Reputation: 46745
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
.
Upvotes: 4