Могу ли я объединить данные при отправке запроса put в базу данных реального времени firebase, используя ax ios? - PullRequest
0 голосов
/ 31 марта 2020

Я могу обновить свои данные в базе данных Firebase Realtime, используя ax ios, например:

axios.put('/blogposts/' + postId + '.json', post, {headers: {'Content-Type': 'application/json'}}).then(response => {
  res.status(200).send(json.stringify(response.data));
}).catch(err => {
  res.status(500).send('error putting blog post.');
});

Но помещаемая запись выглядит так:

{
  title: '...',
  body: '...'
}

и посты в базе данных выглядят так:

{
  title: '...',
  body: '...',
  createdAt: 123,
  updatedAt: 123
}

Перед размещением поста я ставлю ему обновленный штамп:

post.updatedAt = Date.now();

Затем ставлю пост с помощью топора ios звоните выше.

В базе данных пост в конечном итоге выглядит так:

{
  title: '...',
  body: '...',
  updatedAt: 123
}

созданный исчез.

Мне интересно, есть ли параметр конфигурации, который говорит Firebase не перезаписывать весь пост, но каждое поле одно за другим, чтобы заголовок перезаписывался, тело перезаписывалось, updatedAt перезаписывалось, но createAt оставалось в покое. Я считаю, что это называется слиянием, но добавление merge: true к объекту конфигурации не делает то, что я хочу.

Есть ли способ сделать то, что я хочу, или обновленный объект всегда должен включать каждое поле старого объекта, даже если поле не обновляется?

Спасибо.

1 Ответ

1 голос
/ 31 марта 2020

Чтобы объединить записываемые вами данные с существующими данными в местоположении в запросе REST, используйте глагол PATCH . Отсюда следует следующий пример:

curl -X PATCH -d '{
  "nickname": "Alan The Machine"
}' 'https://docs-examples.firebaseio.com/rest/saving-data/users/alanisawesome.json'

В топоре ios, который, кажется, переводится как axios.patch(...).

...