Использование require () или //! Json,! Code в CouchDB? - PullRequest
4 голосов
/ 05 декабря 2010

В Полном руководстве CouchDB автор говорит, что вы можете использовать:

// !json templates.edit
// !json blog
// !code vendor/couchapp/path.js
// !code vendor/couchapp/template.js

Но зачем использовать эти макросы, когда вы можете использовать require ()?

Есть ли случаи, когда я хочу использовать макросы вместо этого?

Ответы [ 4 ]

6 голосов
/ 05 декабря 2010

Это было функцией до того, как модули CommonJS были введены в CouchDB.Эти макросы в значительной степени устарели.

2 голосов
/ 05 декабря 2010

В основном это представляет интерес только при использовании CouchDB с CouchApp .

Позволяет легче отделить данные от функции показа.
Обычно CouchDB использует движок JavaScript Mozilla SpiderMonkey для визуализации представлений, поэтому реализация CommonJS недоступна.

В основном CouchApp позволяет использовать те функции JavaScript «show» (которые хранятся в БД) для рендеринга HTML.

Так что с точки зрения Node.js нет смысла использовать макросы. Кроме того, я быстро просмотрел возможности двух доступных модулей CouchDB для Node.js и не смог найти никакой поддержки для макросов, что дополнительно указывает на то, что это некоторая специфическая функциональность CouchApp.

1 голос
/ 19 августа 2015

Просто добавьте пару связанных вещей, которые я нашел полезными в качестве новичка в 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 для объединения и минимизации нескольких сценариев, встроенных таким образом в один пакет.

0 голосов
/ 29 января 2015

В настоящее время они все еще используются.Хотя использование require кажется более чистым, его сложнее отлаживать, поскольку зависимости оцениваются во время выполнения.Используя макросы, код ищется перед нажатием на Couch

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...