1

对于开发,我想将构成 couchDB 设计文档的各种组件 ( views, lists, shows) 作为单独的文件与我的其他开发代码一起保存在名为 couchDB 的目录中。当我对更改感到满意时,我想使用 couchapp.push 发送到数据库,同时还能够对设计文档组件文件进行版本控制。

我在想也许使用节点模块“couchapp”和节点来扫描目录及其子目录中的 .js 文件,然后使用它们来构建设计文档并上传到 couchDB。也许子目录的结构如下:

designDocsJs
  |-- views
  |     |--view1.js
  |     |--view2.js
  |-- shows
  |-- lists

是否可以将 map 和 reduce 放在同一个文件中,例如。'view1.js'或者他们需要在单独的文件中'view1-map.js''view1-reduce.js'

目前我正在使用以下内容,但我不确定如何使用节点读取 .js 文件并将它们动态添加到 ddoc.views{} ?任何指导将不胜感激,特别是使用 javascript/node 解决方案。

var couchapp = require('couchapp')
    , path = require('path');

  ddoc = {
      _id: '_design/entitiesNew'
    , views: {}
    , lists: {}
    , shows: {} 
  }

  // node module exports
  module.exports = ddoc;

  // REPLACE ME WITH SOME WAY OF READING A
  // STRUCTURED DIR OF .JS FILES AND COMBINING
  // AS NECESSARY
  ddoc.views.byType = {
    map: function(doc) {
      emit(doc.type, null);
    },
    reduce: '_count'
  }

  couchapp.loadAttachments(ddoc, path.join(__dirname, '_attachments'));

进而:

$ cd path/to/here
$ mkdir _attachments
$ couchapp push updateCouchDbDesigndocs.js http://localhost:5984/databaseName
4

1 回答 1

4

couchapp工具就是这样做的。我使用 couchapp 而没有其他脚本推送。

这是目录结构:

mycouchappdir
|-- views/
    |-- myview1/
       |-- map.js
       |-- reduce.js
|-- shows/
    |-- myshow1.js
    |-- myshow2.js
|-- _attachments/
    |-- myattachment.png

您的 map.js 文件将如下所示:

function(doc) {
   emit(doc.type, null);
}

然后couchapp pushmycouchappdir.


您可能还希望考虑将您的 couchapps 放在他们自己的存储库中。运行couchapp push始终会为设计文档创建一个新修订。因此,如果您的 couchapp 有不同的存储库,那么当您对存储库进行更改时,它就是对 couchapp 的更改,您可以在知道新修订版与旧修订版不同的情况下推送它。

于 2013-02-16T20:12:29.457 回答