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 для исправления;;)