在Javascript中记录对象后直接获取未定义

时间:2014-03-02 15:28:32

标签: javascript node.js express

我有以下代码......

var tagMap = {};
console.log("Data" + data);
console.log(JSON.stringify(data));
for(var item in data.results){
  tagMap[item.path.key] = item.value.name;
}

但它输出......

Data[object Object]
{ "count":1,
  "total_count":1,
  "results":[
    {"path": {"collection":"ProcessedReports","key":"20140225.DIF","ref":"4802caab51897eae"},"value":  {"name":"20140225.DIF"},"score":1}
  ]
}
undefined

project/routes/index.js:73
for(var item in data.results){
                    ^
TypeError: Cannot read property 'results' of undefined

我很困惑,怎么回到null?

更新

感谢评论,我注意到日志实际上是以下内容......

Data[object Object]
{"count":1,"total_count":1,"results":[{"path":{"collection":"ProcessedReports","key":"20140225.DIF","ref":"4802caab51897eae"},"value":{"name":"20140225.DIF"},"score":1}]}
Dataundefined  
undefined

这让我相信这个方法被调用2x我会尝试尽快添加更多代码。

使用orchestrate.io的完整路由(expressjs),仍无法找到双重呼叫。我只能在源代码中找到1次调用getloadedfiles。

exports.getloadedfiles = function(req, res, next){
  miao.search({
    collection: 'ProcessedReports',
    query: '*'
  },
  function (err, data) {
    var tagMap = {};
    console.log("Data" + data);
    console.log(JSON.stringify(data));
    for(var item in data.results){
      tagMap[item.path.key] = item.value.name;
    }
    req.processed = tagMap;
    return next();
  });
}

用我的项目的grep ......

grep -r getloadedfiles ./
  .//app.js:app.get('/files/list', routes.getloadedfiles, routes.getfiles, routes.renderfiles);
  .//routes/index.js:exports.getloadedfiles = function(req, res, next){

1 个答案:

答案 0 :(得分:-1)

应该是

for(var item in data.results){
  tagMap[ data.results[item].path.key ] = data.results[item].value.name;
}

使用循环中传递的键访问对象值,否则您正在执行

0.path.key

就像在尝试访问作为键的字符串上的属性一样,这将无法正常工作

FIDDLE

另一件事,data.results是一个数组,应该用

进行迭代
for (var i=0; i<data.results.length; i++) { ...

然后你最终会

for (var i=0; i<data.results.length; i++) {
    tagMap[data.results[i].path.key] = data.results[i].value.name;
}

FIDDLE