javascript - 如何增加动物区的价值?使用 javascript 和服务器端函数
问题描述
我的动物区数据库中有一个值,我想在单击按钮时将其加一。
我不知道该怎么做
我用这个试过:
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 领域(或任何其他非数据库级语言)来回增加。这是不安全的,因为其他人基本上可以同时递增,然后如果您的网络碰巧较慢,您可能会覆盖他们的递增。在这种情况下,只有数据库才能知道是否锁定。
这是一个例子,如果一个主题的初始点击计数是 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
)
}
}
)
希望这会有所帮助。
推荐阅读
- html - 将按钮固定到 flexbox 列布局的底部,margin-top:auto 不起作用
- java - 创建一个抽象类并推断子类的私有属性
- python - 使用 Beautiful Soup 模块打印数据单独的行
- cpu - 英特尔涡轮增压驱动程序要求
- .net-core - 始终使用 ODBC 和 Azure Vault 加密查询
- java - 三星 Galaxy 手机常用于请勿打扰(派)
- apache-spark - 如何对 Spark Streaming 生成的分区 parquet 文件进行适当的内务管理
- python - Azure Functions Python - 部署项目,该项目使用安装脚本导入自己的 python 包
- phaser-framework - 如何在 Phaser 3 中创建动画按钮?
- django - IntegrityError:尽管有 form_valid() 覆盖,FK 字段 (user_id) 仍为“null”