Просто добавьте пару связанных вещей, которые я нашел полезными в качестве новичка в CouchDB.
Во-первых, функция require()
, по-видимому, не в состоянии включать вложения документов проекта, что означает, что есливы хотите включить один и тот же сценарий как на клиенте, так и на сервере, но вы не можете помещать их во вложения, как вы могли бы ожидать.
То есть, хотя следующее работает нормально, если документ проекта имеет свойство somewhere.foo
, содержащее Javascript:
var js = require('somewhere/foo')
Это не так:
var js = require('_attachments/foo')
Ошибка (я использую CouchDB v1.6):
{"error":"invalid_require_path",
"reason":"Must require a JavaScript string, not: object"}
Из-за этогоЯ помещал свои сценарии в проектный документ как свойства, а не вложения.Это означает, что к ним можно получить доступ на сервере через require()
, а также на клиенте (через функцию show).
Во-вторых, возможен только require()
ing Javascript, что означает, что вы не можете использоватьон включает в себя, скажем, шаблоны HTML, загруженные в качестве свойств проектного документа.
Директивы !code
и !json
, поддерживаемые couchapp, здесь мало помогают.(Не говоря уже о том, что мне, кажется, не очень удастся заставить их работать вообще ...)
Уловка, которую я нашел полезной для шаблонов, заключается в том, что вы можете получить доступ к свойствам проектного документа непосредственно в представлениях и представлениях.используя this
.Таким образом, с учетом свойства проектного документа templates.edit
, это работает:
var template = this.templates.edit;
Это хорошо связывается, так как его также можно использовать для предоставления функции показа, которая доставляет Javascript, который вы встроили в качестве свойства.Скажем, это в свойстве shows.myscript
проектного документа:
function(doc, req) {
return this.js.myscript;
}
Тогда URL http://localhost:5984/<database>/_design/<id>/_show/myscript
будет предоставлять его клиенту, то есть вы можете ссылаться на него в своем HTML.При желании вы также можете использовать функцию show для объединения и минимизации нескольких сценариев, встроенных таким образом в один пакет.