当我使用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
答案 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并且重置将不起作用/未定义。