如何增加 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 土地(或任何其他非数据库级语言)来增加。这是不安全的,因为其他人可以基本上同时递增,然后如果您的网络恰好较慢,您可能会覆盖他们的递增。只有数据库才能知道在这种情况下是否锁定。
这是一个例子,如果一个主题的初始点击次数是 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
)
}
}
)
希望对您有所帮助。
我的 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 土地(或任何其他非数据库级语言)来增加。这是不安全的,因为其他人可以基本上同时递增,然后如果您的网络恰好较慢,您可能会覆盖他们的递增。只有数据库才能知道在这种情况下是否锁定。
这是一个例子,如果一个主题的初始点击次数是 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
)
}
}
)
希望对您有所帮助。