Можно ли динамически добавлять представления в cloudant (couchdb) через node.js с помощью nano

Я использую cloudant-couchdb в первый раз, и я просто застрял с этой проблемой. Я пытаюсь динамически вставить представление в свою базу данных через мой сервер node.js.

Вот мой код.

app.post("/listSections", function(req, res) {      
  var moduleID = req.body.name;                             
  console.log(moduleID);        
  db.insert(
        { "views":
            { moduleID:     //create view with name = moduleID
                { 
                    "map": function (doc) {
                       //some function
                }
            }
        }, 
        '_design/section', function (error, response) {
                console.log("Success!");        
   });          
});

Я хочу создать представление динамически с именем представления, являющимся значением переменной moduleID. Как я могу передать эту переменную в функцию вставки?


person Kashif Kai    schedule 24.06.2015    source источник


Ответы (1)


Имена переменных нельзя интерполировать в определениях литералов объектов. Предварительно создайте объект.

var obj = {};
obj[moduleID] = {map: function () {}};

db.insert({views: obj},

Если вы используете ES6 и доступны имена вычисляемых свойств, вы можете сделать это вместо этого:

db.insert({views: {[moduleID]: {

См.: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Object_initializer

person Explosion Pills    schedule 24.06.2015
comment
Ты абсолютно прав. Большое спасибо. Однако я могу добавить только одно представление с ним. Он не будет добавлять новые представления (с разными идентификаторами модуля) для нескольких почтовых запросов. - person Kashif Kai; 24.06.2015
comment
Этот код работает, но только для первого просмотра. Он не будет добавлять представления после имени - Ошибка: конфликт обновления документа. - person Kashif Kai; 25.06.2015
comment
Представления @KashifKai должны иметь уникальные имена. Если вы хотите создать другое представление, ему нужно другое имя (или вы должны удалить исходное представление). - person Explosion Pills; 25.06.2015