2

我有一个 CouchDB 数据库(v1.2.0),其中包含以下文档:

{
   "_id": "pages/1",
   "_rev": "15-56ad5a5e879206edb04a7a62105dd25d",
   "content": "<html lang=\"en\"><head><title>Page Title</title></head></html>"
}

根据这篇文章,我应该简单地写一个这样的视图:

// by_lang
function(doc) {
    var html = new XML(doc.content);
    emit(html.@lang, {title: html.head.title.text()});
}

, 从 XML 中获取数据。

不幸的是,这不起作用。起初我认为我下载的 CouchDB 二进制文件不包括包含 E4X 的 SpiderMonkey,但事实并非如此。如果我添加一条log(html);语句,我可以看到 XML 已正确解析(@ Erlang 窗口)。

Erlang 窗口指出我的代码有问题的是:

Log :: function raised exception (new TypeError("String.prototype.toJSON called on incompatible XML", "../share/couchdb/server/main.js", 1138)) with doc._id pages/1

我打开了main.js文件,中断的代码如下:

// moving this away from global so we can move to json2.js later
toJSON : function (val) {
    return JSON.stringify(val);
},

谷歌搜索那个错误把我带到了这个提到 json2.js 的页面(上面代码的注释中也提到了它。

任何想法如何解决这个问题?有没有可能这是一个错误,或者我在这里做错了什么?

4

1 回答 1

1

认为问题在于toJSON无法转换任何html.@lang对象(在您调用之前它不是纯字符串.toString()

因此,将您的电话更改emit为包含toString()电话(请注意,我还将电话更改.text().toString()电话:

emit(html.@lang.toString(), {title: html.head.title.toString()});
于 2012-06-29T01:22:39.290 回答