CouchDB에서 require() 또는 //! json,! 코드 사용?
// !json templates.edit
// !json blog
// !code vendor/couchapp/path.js
// !code vendor/couchapp/template.js
왜 require()를 사용할 수있을 때 매크로를 사용합니까?
대신 매크로를 사용하고 싶습니까?
CouchDB에서 require() 또는 //! json,! 코드 사용?
// !json templates.edit
// !json blog
// !code vendor/couchapp/path.js
// !code vendor/couchapp/template.js
왜 require()를 사용할 수있을 때 매크로를 사용합니까?
대신 매크로를 사용하고 싶습니까?
기본적으로 이것은 CouchApp과 함께 CouchDB를 사용할 때만 유용합니다.
show 기능에서 데이터를 쉽게 분리 할 수 있습니다.
일반적으로 CouchDB는 Mozilla의 SpiderMonkey JavaScript 엔진을 사용하여 뷰를 렌더링하므로 CommonJS 구현을 사용할 수 없습니다.
기본적으로 CouchApp를 사용하면 HTML을 렌더링하는 데 필요한 JavaScript의 "표시"기능 (DB에 저장 됨)을 사용할 수 있습니다.
그래서 Node.js의 관점에서 볼 때 매크로를 사용하는 것이 실제로 의미가 없습니다. 또한 Node.js에서 사용 가능한 CouchDB 모듈 두 개를 빠르게 살펴 보았습니다. 매크로에 대한 지원을 찾을 수 없었습니다. 추가로 이것이 CouchApp의 특정 기능임을 나타냅니다.
현재 둘 모두 여전히 사용 중입니다. require
을 사용하는 것이 더 깨끗해 보이지만 런타임에 종속성이 평가되므로 디버그하기가 더 어렵습니다. 매크로를 사용하여 코드를 찾아보기 전에 코드를 찾아 보겠습니다.
CouchDB의 신참으로 유용한 몇 가지 관련 항목을 추가하기 만하면됩니다.
처음에는 require()
기능에 디자인 문서 첨부 파일을 포함 할 수없는 것 같습니다. 즉, 클라이언트와 서버에 동일한 스크립트를 포함시키려는 경우 예상대로 첨부 파일에 넣을 수 없습니다.
var js = require('somewhere/foo')
이하지 않는 :
var js = require('_attachments/foo')
오류는 (내가 사용 설계 문서는 자바 스크립트를 포함하는 특성 somewhere.foo
이있는 경우 다음 확인을 작동하지만입니다
, CouchDB v1.6) :
{"error":"invalid_require_path",
"reason":"Must require a JavaScript string, not: object"}
이 때문에 나는 내 스크립트 i n 디자인 문서는 첨부 파일이 아닌 속성으로 사용됩니다. 이는 서버에 require()
을 통해 액세스 할 수 있고 클라이언트에서도 (show 기능을 통해) 액세스 할 수 있음을 의미합니다.
두 번째로는 자바 스크립트 만 가능하므로 디자인 문서 속성으로 업로드 된 HTML 템플릿을 포함 할 수 없습니다.
couchapp에서 지원하는 !code
및 !json
지시문은 여기에서별로 도움이되지 않습니다. (나는 그들이 일을하는 데 많은 성공을 거두지 못했다고 말할 것도없고 ...)
템플릿에 유용한 트릭은 쇼 및 뷰에서 직접 디자인 문서 속성에 액세스 할 수 있다는 것입니다 (this
). 따라서 설계 문서 속성 templates.edit
을 주어,이 작품 : 친절에
var template = this.templates.edit;
이 관계, 또한 당신이 속성으로 내장 한 자바 스크립트를 제공하는 쇼 기능을 제공하기 위해 사용될 수있다. 이 설계 문서의 shows.myscript
특성에 말 :
function(doc, req) {
return this.js.myscript;
}
는 그 다음 URL
http://localhost:5984/<database>/_design/<id>/_show/myscript
당신이 당신의 HTML에서 참조 할 수 있습니다 의미 클라이언트에 서비스를 제공합니다. 또한 show 함수를 사용하여 원하는 경우이 방법으로 포함 된 여러 스크립트를 하나의 패키지로 결합하고 최소화 할 수 있습니다.
나는이 모든 것을 알아 내려고 노력하고 있습니다. 쇼 기능에서 어떻게 html 템플릿을 참조 할 수 있습니까? require()를 사용할 수 있습니까? – Costa
kan.so에서 간소 도구를 검토하십시오. Common JS 기반의 대체 방법을 사용할 수 있습니다. –
@Costa : 아마도 당신을 위해 너무 늦었 겠지만, 여기 내 대답을 참조하십시오. –