Node.js和未定义的属性

时间:2010-11-25 13:43:21

标签: javascript node.js

我正在尝试使用GET变量来传输一些简单的数据,但出于某种原因,我做错了。

我的代码非常简单。我使用Node.js HTTP& URL库。当我尝试运行以下代码时,我得到TypeError:无法读取未定义的属性'foo'。我真的不明白为什么因为foo是在URL中传递的,如果我将console.log作为q对象,那就有foo值。

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

1 个答案:

答案 0 :(得分:4)

问题不在于foo不存在,问题是q本身就是undefined

这是从哪里来的?好吧,如果我们清理它并添加一些日志......

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

..我们发现浏览器要求:

/bla?foo=1
/favicon.ico
你去吧!当然,favicon请求没有GET参数,您只需要检查q是不是undefined