簡體   English   中英

如何增加faunadb中的價值? 使用 javascript 和服務器端函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM