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

問題は、オブジェクトが何であれ変換できなかったことだと思います(呼び出すまでは単純な文字列ではありません)toJSONhtml.@lang.toString()

したがって、通話emitを含めるように変更します(通話も通話にtoString()変更したことに注意してください:.text().toString()

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