[英]How to increment value in faunadb? Using javascript and serverside functions
我的 faunadb 數據庫中有一個值,我想在單擊按鈕時將其增加 1。
我不知道該怎么做
我試過這個:
const change = (data) => {
return fetch(`/.netlify/functions/todos-update`, {
body: JSON.stringify(data),
method: 'POST'
}).then(response => {
return response.json()
})
}
並用這個觸發它
var dataa = document.getElementById('amount').innerHTML
change(("value: " + dataa))
我的服務器端代碼是這樣的:
exports.handler = (event, context, callback) => {
const data = JSON.parse(event.body)
const id = "236323245287014920"
console.log(`Function 'todo-update' invoked. update id: ${id}`)
return client.query(q.Update(q.Ref(`classes/nappi/${id}`), {data}))
.then((response) => {
console.log('success', response)
return callback(null, {
statusCode: 200,
body: JSON.stringify(response)
})
}).catch((error) => {
console.log('error', error)
return callback(null, {
statusCode: 400,
body: JSON.stringify(error)
})
})
}
我希望這會將我在數據庫中的值增加 1,但實際上我收到一個如下所示的錯誤: POST https://nappula.tk/.netlify/functions/todos-update 400 (Bad Request)
我不確定我哪里出錯了
對於非平凡的應用程序,您不應該依賴於來回 JavaScript 領域(或任何其他非 DB 級語言)來增加。 這是不安全的,因為其他人基本上可以在同一時間遞增,然后如果您的網絡碰巧變慢,您可能會覆蓋他們的遞增。 在這種情況下,只有數據庫才能知道是否鎖定。
這是一個例子,如果一個主題的初始點擊計數是 1,那么在你和我都增加這個計數的同時,數據庫必須知道實際計數應該是 3 而不是 2。你應該有一個增量在您的 FaunaDB 中運行以確保它可以根據需要阻止以確保應用正確的 clickCount。
假設您有一個名為主題的集合,其中包含一些如下所示的文檔:
主題文檔#id 254119747652682260
{ slug: "dev", clickCount: 1 }
主題文檔#id 254119747652122323
{ slug: "design", clickCount: 1 }
那么,在主題集合中,對於 id 為 254119747652682260 的文檔,如何安全地將 clickedCount 字段從 1 增加到 2?
Update(
Ref(
Collection('topics'),
'254119747652682260'
),
{
data: {
clickCount: Add(
Select(
['data','clickCount'],
Get(
Ref(
Collection('topics'),
'254119747652682260'
)
)
),
1
)
}
}
)
希望這有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.