javascript - 如何增加动物区的值(value)?使用 javascript 和服务器端函数

标签 javascript faunadb

我的动物区数据库中有一个值,我想在单击按钮时将其加一。
我不知道该怎么做

我用这个试过:

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。

假设您有一个名为 topic 的集合,其中包含一些如下所示的文档:

主题文档#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
            )
        }
    }
)

希望这会有所帮助。

关于javascript - 如何增加动物区的值(value)?使用 javascript 和服务器端函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56894199/

相关文章:

database - 我如何从 FaunaDB 中选择一个随机实例?

java - 如何获取 FaunaDB 类中的所有实例

javascript - 所选元素具有相同的值但不同的 id

javascript - "let"和 "var"有什么区别?

graphql - 错误消息: Instance Data is not valid whilst updating a GraphQL schema

faunadb - 具有可搜索嵌套对象数组的 CreateIndex

javascript - 具有自调用函数的数组初始化

javascript - 为什么我在访问使用 Node.js/Express-TypeScript 的 SSL 证书时遇到问题?

javascript - jQuery 在一个又一个的 child 中淡入淡出

javascript - 如何从 HTML 页面访问 FaunaDB?