Hoodie - обновить документ CouchDB (Node.js)

Я обрабатываю платежи и подписки клиентов с помощью Stripe, и я хочу использовать эти обработчики в качестве плагина Hoodie.

Платежи, а также регистрации и подписки клиентов обычно отображаются в Stripe Dashboard, но я хочу обновить базу данных _users в CouchDB, чтобы информация о клиентах где-то сохранялась. Что я хочу сделать, это обновить stripeCustomerId поле в org.couchdb.user:user/bill документ, из моего _users база данных, которая создается при входе в систему с капюшоном. И если это возможно, создать это поле, если оно не существует.

В документе hoodie-plugin функция обновления мне кажется довольно неоднозначной.

// update a document in db
db.update(type, id, changed_attrs, callback)

Я предполагаю что type тот, который упоминается в документе CouchDB, или тот, который мы указываем при добавлении документа с db.add(type, attrs, callback) например.

id Кажется, это идентификатор документа в couchdb. В моем случае это org.couchdb.user:user/bill, Но я не уверен, что именно этот идентификатор я должен передать в своей функции обновления.

Я предполагаю что changed_attrs является объектом Javascript с обновленными или новыми атрибутами в нем, но и здесь у меня есть сомнения.

Так что я попробовал это в моем worker.js:

function handleCustomersCreate(originDb, task) {
    var customer = {
      card: task.card
    };
    if (task.plan) {
      customer.plan = task.plan;
    }

    stripe.customers.create(customer, function(error, response) {
      var db = hoodie.database(originDb);
      var o = {
        id: 'bill',
        stripeCustomerId: 'updatedId'

      };

      hoodie.database('_users').update('user', 'bill', o, function(error) {
        console.log('Error when updating');
        addPaymentCallback(error, originDb, task);
      });


      db.add('customers.create', {
        id: task.id,
        stripeType: 'customers.create',
        response: response,

      }, function(error) {
        addPaymentCallback(error, originDb, task);
      });
    });
  }

И между другими сообщениями я получил этот журнал ошибок:

TypeError: Converting circular structure to JSON

И мой файл не обновляется: stripeCustomerId поле остается null, Я пытался JSON.stringify мой o объект, но это ничего не меняет.

Я надеюсь, что некоторые из вас лучше информированы, чем я db.update функция.

1 ответ

Решение

Наконец, я решил присоединиться к официальному IRC-каналу Hoodie, и они быстро решили мою проблему.

На самом деле user.docs нуждается в дополнительном API, и для его обновления вы должны использовать hoodie.account вместо hoodie.database(name)

Полный синтаксис:

hoodie.account.update('user', user.id, changedAttrs, callback)

где user.id на самом деле имя учетной записи, установленное в форме регистрации Hoodie, и changedAttrs реальный объект JS, как я и думал.

Престижность gr2m для исправления;;)

Другие вопросы по тегам