我有以下代码......
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){
答案 0 :(得分:-1)
应该是
for(var item in data.results){
tagMap[ data.results[item].path.key ] = data.results[item].value.name;
}
使用循环中传递的键访问对象值,否则您正在执行
0.path.key
就像在尝试访问作为键的字符串上的属性一样,这将无法正常工作
另一件事,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;
}