2017-12-12 10 views
0

과 호환되지 않습니다. GET {db}/_design/{ddoc}에 의해 반환 된 개체는 PUT 요청에서 서버로 반환 될 때보기를 무효화하는보기의 'map'값에 전체 유효성 검사 구문을 주입합니다. 이 새로운 객체가 반환되는 경우,동기화 게이트웨이 쿼리 PUT이 GET

GET {dB}/_ 디자인/{ddoc}

{ 
'views': { 
    '_test': { 
     'map': 'function(doc,meta) {\n\t\t 
      var sync = doc._sync;\n\t\t 
      if (sync === undefined || meta.id.substring(0,6) == "_sync:")\n\t\t 
      return;\n\t\t 
      if ((sync.flags & 1) || sync.deleted)\n\t\t 
      return;\n\t\t 
      var channels = [];\n\t\t 
      var channelMap = sync.channels;\n\t\t\t\t\t\t\t 
      if (channelMap) {\n\t\t\t\t\t\t\t\t 
      for (var name in channelMap) {\n\t\t\t\t\t\t\t\t\t 
      removed = channelMap[name];\n\t\t\t\t\t\t\t\t\t 
      if (!removed)\n\t\t\t\t\t\t\t\t\t\t 
      channels.push(name);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t 
      delete doc._sync;\n\t\t 
      meta.rev = sync.rev;\n\t\t 
      meta.channels = channels;\n\n\t\t 
      var _emit = emit;\n\t\t 
      (function(){\n\t\t\t 
      var emit = function(key,value) {\n\t\t\t 
      \t_emit(key,[channels, value]);\n\t\t\t 
      };\n\t\t\t\t\t\t\t\t 
      (function(doc, meta) { if (doc.uid == "test1") { emit(null, null); } }) (doc, meta);\n\t\t\t\t\t\t\t 
      }());\n\t\t\t\t\t\t\t 
      doc._sync = sync;\n\t\t\t\t\t\t}' 
     } 
    } 
} 

}

을 그리고 예를 들면 다음과 같습니다

:

PUT {db}/_design/{ddoc} 
{'views': 
    {'_test': 
    {'map': 
     'function(doc, meta) { if (doc.uid == "test1") { emit(null, null); } }' 
    } 
    } 
} 

가 생성 후속 설계 문서 PUT 요청에서 뷰가 유효하지 않아 효과적으로 제거됩니다.

디자인 문서를 새 뷰로 업데이트하려고 할 때 이와 관련된 모든 이전 뷰를 제거하지 않으면 문제가 발생합니다. 업데이트 된 디자인 문서를 다시 제출하기 전에 모든 (사용자 정의) 뷰 정의를 어딘가에 저장해야하거나 애플리케이션이 GET에서 반환 한 객체를 구문 분석하고 모든 정크 코드를 제거해야합니다.

답변

0

동기화 게이트웨이는 응용 프로그램 수준 보안을 추가하기 위해 wrap Couchbase Server보기가 필요합니다.

항상 동기화 게이트웨이를 통해보기에 액세스합니까? 예를 들어 디자인 문서를 업데이트하려고한다면 Sync Gateway를 통하거나 Couchbase Server를 사용하고 있습니까? 전자는 권장 접근법입니다.

+0

의미가 있습니다. 필자의 경우 GET과 PUT은 모두 동기화 게이트웨이 포트를 통해 호출됩니다. 따라서, 귀하의 권장 접근 방식을 사용하고 있습니다 ... 요청이 CS로 직접 전달되면 차이가 있습니까? –

+0

어쩌면 원래 문제를 이해하지 못하는 것일 수 있습니다. 현재보고있는 문제를 재현하는 일련의 말림문을 게시 할 수 있습니까? 너무 길어서 SO로 직접 게시 할 수 없다면 요점이나 붙여 넣기 도구에 넣을 수 있습니까? – tleyden