2017-03-26 10 views
1

CouchDB 1.6.1 hereのドキュメントを見ると、JS require(path)関数を使うことができます。これどうやってやるの?ドキュメントには、pathは「設計ドキュメントルートから開始されたCommonJSモジュールパス」と記載されています。マップ関数内でどのようにrequire()を使用しますか?

マイデザインドキュメントが_design/dataと呼ばれています。私は/_design/data/test.jsでアクセスすることができtest.jsと呼ばれるこの設計ドキュメントに添付ファイルを、アップロード、および次のコードが含まれています:

exports.stuff = function() { 
    this.getMsg = (function() { 
     return 'hi'; 
    })() 
} 

しかし、私のマップ機能で次のコード:

function(doc) { 
    try { 
    var x = require('test.js'); 
    } catch (e) { 
    emit ('error', e) 
    } 
} 

結果でこのエラーは:内のオブジェクトとしてパスを探しているrequireよう

["error", "invalid_require_path", "Object has no property \"test.js\". {\"views\":{\"lib\":null},\"_module_cache\":{}}"] 

に見えますparam ...しかし、それがなぜなのか分からない。

のCouchDBの古いバージョンではこの機能を説明、thisリンクを見ると、それはあなたができると言う:

However, in the upcoming CouchDB 1.1.x views will be able to require modules provided they exist below the 'views' property (eg, 'views/lib/module')

そして、次のコード例を示します:

{ 
    "_id": "_design/example", 
    "lib": { 
     // modules here would not be accessible from view functions 
    }, 
    "views": { 
     "lib" { 
      // this module is accessible from view functions 
      "module": "exports.test = 'asdf';" 
     }, 
     "commonjs": { 
      "map": function (doc) { 
       var val = require('views/lib/module').test; 
       emit(doc._id, val); 
      } 
     } 
    } 
} 

しかし、これは動作しませんでしたCouchDB 1.6.1に関する私のために。

https://wiki.apache.org/couchdb/CommonJS_Modulesは、私が働い例を得た:この例を使用

{message: "mod.current is null", fileName: "/usr/share/couchdb/server/main.js", lineNumber: 1137, stack: "([object Array],[object Object])@/usr/share/couchdb/server/main.js:1137\n([object Array],[object Object])@/usr/share/couchdb/server/main.js:1143\n([object Array],[object Object],[object Object])@/usr/share/couchdb/server/main.js:1143\n(\"views/lib/module\")@/usr/share/couchdb/server/main.js:1173\n([object Object])@undefined:3\n([object Object])@/usr/share/couchdb/server/main.js:1394\n()@/usr/share/couchdb/server/main.js:1562\[email protected]/usr/share/couchdb/server/main.js:1573\n" 

答えて

1

あなたの質問では、文字列。発見するのは容易ではありませんが、CouchDBに格納する前に関数をストリング化する必要があります(手動または.toString()を使用)。 Caolanはあなたがリンクした投稿にそのエラーがあります。

+0

ありがとうございました。あなたはtest.jsを意味しますか? –

+0

いいえ、あなたの質問で。 '' commonjs '' {"map": "function(doc){var val = require( 'views/lib/module')。}これは、コメントの方が上手く書けるはずです。 ; emit(doc._id、val);} "}' –

0

:ここに古いCouchDBのドキュメントに

15 views: { 
    16  lib: { 
    17  foo: "exports.bar = 42;" 
    18  }, 
    19  test: { 
    20  map: "function(doc) { emit(doc._id, require('views/lib/foo').bar); }" 
    21  } 
    22 } 

を見つけ、私はエラーを取得します。その違いが本当に何だったのかわかりません...私は貯蓄の代わりに 'temp'ビューを実行していましたが、なぜそれがrequireステートメントに影響しているのか分かりません

関連する問題