我有一个CouchDB数据库(v1.2.0),其中包含以下文档:
{
"_id": "pages/1",
"_rev": "15-56ad5a5e879206edb04a7a62105dd25d",
"content": "<html lang=\"en\"><head><title>Page Title</title></head></html>"
}
根据this article我应该写一个像这样的观点:
// 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);
},
Google搜索该错误后,我将this page提到了json2.js(在上面的代码中的注释中也提到了这一点。
任何想法如何解决这个问题?有没有机会这是一个错误,或者我在这里做错了什么?
答案 0 :(得分:1)
我认为问题是toJSON
无法转换html.@lang
对象的任何内容(在你调用.toString()
之前它不是一个普通的字符串
因此,请将emit
更改为包含toString()
来电(请注意,我还将.text()
来电更改为.toString()
来电:
emit(html.@lang.toString(), {title: html.head.title.toString()});