2017-03-26 1 views
1

CouchDB 1.6.1 here에 대한 문서를 보면 JS require (path) 기능을 사용할 수 있다는 언급이 있습니다. 어떻게 할 수 있니? 설명서에 path은 "설계 문서 루트에서 시작된 CommonJS 모듈 경로"라고 나와 있습니다.map 함수 내에서 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 ...하지만 그것이 왜인지 이해하지 못합니다.

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')

을 그리고 다음 코드 예제 제공 :

, this 링크에서 찾고 CouchDB를 이전 버전에서이 기능을 설명하는, 그것은 당신이 할 수 말한다

{ 
    "_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 } 

발견 나는 오류가 발생합니다. 그 차이가 실제로 무엇인지 알지 못합니다 ... 절약 대신 '임시보기'를 실행하고 있었는데 왜 require 문을 실행했는지 모르겠습니다.

관련 문제