#typescript #firebase #google-cloud-firestore
#typescript #firebase #google-облако-firestore
Вопрос:
В моем firestore у меня есть несколько документов, представляющих сообщения на форуме для проекта, который я разрабатываю с помощью функций firebase и typescript.
Структура firestore выглядит следующим образом:
{
forumPosts: {
:forumPostId: {
id: string,
content: string,
icon: string,
...
}
}
}
Теперь я бы хотел разрешить пользователю обновлять свой пост. Тело запроса должно содержать только те поля, которые необходимо обновить: допустим, я хотел бы обновить содержимое своего сообщения, тело запроса должно выглядеть следующим образом:
{
content: "updated content"
}
Функция firebase, которая в настоящее время обрабатывает обновление, выглядит следующим образом.
export const updateNewForumPost=functions.https.onRequest((req: PR_UserRequest, res: Response) => {
const fieldsToUpdate = {
id: req.body.id,
content: req.body.content,
icon: req.body.icon,
...
}
db.collection("forumPosts").doc(req.params.postId).update( fieldsToUpdate )
.then(() => {
res.json({ message: `forum post ${req.params.postId} updated successfully` })
})
.catch((error) => res.json({ error }))
});
Поэтому я помещаю в объект «поля для обновления» каждое поле, имеющееся в forumPost, и неизбежно в запросе содержится много полей со старыми значениями, которые не нуждаются в обновлении.
Как я уже сказал, я пытаюсь найти способ поместить в этот объект только те поля, которые пользователь ввел в свой запрос. Есть идеи о том, как мне следует работать с этой проблемой?
Заранее спасибо.
Комментарии:
1. В чем проблема с кодом, которым вы поделились? Итак: когда вы просматриваете этот код в отладчике, какая строка не выполняет то, что вы ожидаете от нее?
2. Реальной проблемы нет. Дело в том, что в объекте post есть много полей, которые можно обновлять, например, содержимое, заголовок и многое другое. Если пользователь хочет обновить только одно из них, скажем, содержимое, я должен сделать запрос с обновленным содержимым, а все остальные поля — со старыми значениями. Для меня это очень сложно, особенно если объект большой, как в этом случае.
3. Вам
fieldsToUpdate
нужно только содержать поля, которые вы хотите обновить. Передача полей, которые не были изменены, — это просто пустая трата пропускной способности. Итак, как насчет добавления каждого поляfieldsToUpdate
только после того, как вы узнаете, что пользователь изменил его значение?