url.parse()返回未定义的对象键
当我使用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
回答如下:您需要像最初使用的那样使用已解析的query
的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]}`);
}
编辑:
关于为什么不能执行类似queryData.key
之类的解释是,它将尝试访问名为'key'的queryData
对象中的属性,而不是当前的key
变量值(在这种情况下为'season' )。
在这种情况下,queryData
对象看起来像这样:
var queryData = {
'season': 'summer'
};
如果您尝试访问queryData.key
,它将查找名为'key'的文字键,而不是key
变量的值,该变量恰好是for in
循环的第一次迭代。使用queryData[key]
可以访问分配给key
变量的键的值。