我的动物区数据库中有一个值,我想在单击按钮时将其加一。
我不知道该怎么做
我用这个试过:
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/