最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

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

运维笔记admin10浏览0评论

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

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
回答如下:

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

查看下面的简化示例(注意: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变量的键的值。

发布评论

评论列表(0)

  1. 暂无评论