url.parse()返回未定义的对象键

时间:2019-10-04 22:23:39

标签: javascript node.js

当我使用url.parse(来自node.js中的url模块)时,它返回未定义的对象键

我一直在互联网上搜索,显然大多数人都使用express.js,所以我没有发现与我类似的任何情况

这是代码(缩短了):

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

http.createServer(function(req, res) {
if (req.url != '/favicon.ico') {
    var q = Url.parse(req.url, true);
    console.log(req.url);
    for (var key in q) {
        console.log(key + ':' + q.key);
    }
    console.log('closing');
    res.end();
}
}).listen(8080);

,控制台显示以下内容:

/?season=summer
protocol:undefined
slashes:undefined
auth:undefined
host:undefined
port:undefined
hostname:undefined
hash:undefined
search:undefined
query:undefined
pathname:undefined
path:undefined
href:undefined
parse:undefined
format:undefined
resolve:undefined
resolveObject:undefined
parseHost:undefined
closing

2 个答案:

答案 0 :(得分:1)

您需要像最初使用的那样使用已解析的query的{​​{1}}属性。您只需要正确访问查询对象的值即可。

查看下面的简化示例(注意:Url):

queryData[key]

修改

为什么不能执行类似const url = require('url'); const queryData = url.parse('http://127.0.0.1:8000/status?season=summer', true).query; for (const key in queryData) { console.log(`${key}: ${queryData[key]}`); } 之类的解释是,它会尝试访问名为{key}的queryData.key对象中的属性,而不是当前的queryData变量值(在本例中为“季节”)。

在这种情况下,key对象看起来像这样:

queryData

如果您尝试访问var queryData = { 'season': 'summer' }; ,它将查找名为'key'的文字键,而不是queryData.key变量的值,该变量恰好是{{ 1}}循环。使用key可以访问分配给for in变量的键的值。

答案 1 :(得分:0)

您需要使用var q = Url.parse(req.url, true).query;来代替var q = Url.parse(req.url, true);

否则,q将已经是Url.parse()。query并且重置将不起作用/未定义。