CouchDB列表函数抛出TypeError(点是未定义的)

时间:2014-01-25 02:24:55

标签: javascript couchdb

我试图从我的数据库中获取一个列表。文件看起来像:

{
"class": "lists",
"collection": "symptoms",
"order": "6",
"en": "Headache",
"_id": "9022034e7d5ecd0efab0762c5b7f0c04"
}

有任意数量的“集合”。

视图函数只返回“list”类中​​的一堆对象:

// Emit lists
exports.viewlist = {
  map: function(doc) {
    if (doc.class === 'lists') {
        emit(
            doc.collection, {
                order: doc.order,
                name: doc.en
            });
    }
  }
};

我编写了一个列表函数,试图将输出过滤到我想要的列表。

exports.viewlist = function(head, req) {
  var row;
  start({
    code: 200,
    headers: {
        'Content-Type': 'text/json; charset=utf-8',
  }
});
while (row = getRow()) {
    if (row.collection === req.l) {
      send(JSON.stringify(row.value));
    }
  }
};

当我访问列表的URL时,CouchDB会抛出错误:

http://localhost:5984/dev/_design/emr/_list/viewlists/viewlist?l=symptoms

{"error":"TypeError","reason":"{[{<<\"message\">>,<<\"point is undefined\">>},     
{<<\"fileName\">>,<<\"/usr/share/couchdb/server/main.js\">>},  
{<<\"lineNumber\">>,1500},\n  {<<\"stack\">>,
<<\"(\\\"_design/emr\\\",[object Array],
[object Array])@/usr/share/couchdb/server/main.js:1500\
()@/usr/share/couchdb/server/main.js:1562\
@/usr/share/couchdb/server/main.js:1573\
\">>}]}"}

我无法弄清楚我在哪里出错了。

1 个答案:

答案 0 :(得分:2)

我也遇到了这个错误,导致它的原因,正如@ Pea-pod在这里Submitting form to couchDB through update handler not working所暗示的那样,并没有在couchapp的设计文档中正确定义你的exports。在我们的例子中,它作为list函数无法调用,而是在couchdb日志中显示500 {0}} Type errorpoint is undefined错误。

我们使用kanso,在app.js中我们没有要求列表文件。我们有:

module.exports = {
    rewrites: require('./rewrites'),
    views: require('./views'),
    shows: require('./shows')
};

将其更改为以下内容解决了问题:

module.exports = {
    rewrites: require('./rewrites'),
    views: require('./views'),
    shows: require('./shows')
    lists: require('./lists'),
};

我是否可以建议主持人更改此问题的标题以包含point is undefined,这是在发生此类错误时CouchDB日志中显示的错误,以帮助其他人找到更多错误容易吗?