Как мне обновить данные в моей базе данных в реальном времени Firebase с существующими данными наряду со случайно сгенерированным идентификатором - PullRequest
1 голос
/ 30 октября 2019

Я отправляю данные из формы в мою базу данных. Как я правильно понял, использование .push () создает уникальный идентификатор, куда мои данные добавляются и загружаются. Теперь мне нужно получить те же данные, а затем добавить новую запись идентификатора. Но я не могу ссылаться на данные, поскольку они хранятся под уникальным идентификатором, созданным методом .push ().

exports.addUser = functions.https.onRequest(async (req, res) => { //Adds data from the form to the database
  cors(req, res, async () => {
    // Grab the message body parameter.
    const entry = req.body;
    // Push the new message into the Realtime Database using the Firebase Admin SDK.
    const snapshot = await admin.database().ref('entries/users/').push(entry);

    console.log('my new shiny id is ' + snapshot.key());
    // Redirect with 303 SEE OTHER to the URL of the pushed object in the Firebase console.
    res.redirect(303, snapshot.ref.toString());
  })
});

//Function to generate a random ID and update into the entry from the form on the database.
exports.generateID = functions.database.ref('entries/users/').onCreate((snapshot, context) => {
  console.log(snapshot.val());
  const original = snapshot.val();
  console.log(context);
  console.log(snapshot.key());
  const dev = '0eeb94ca-3426-46ca-964d-a9bdd7d00ef0';
  var random = Math.random().toString(36).substring(7);
  const code = uuidv5('user-' + random, dev);
  return snapshot.ref.update({
    userID: code
  });
})

Вот изображение структуры данных в моей базе данных реального времени. database structure

Ответы [ 2 ]

3 голосов
/ 30 октября 2019

Я думаю, что вы хотели использовать подстановочный знак в своей функции для захвата этого идентификатора (а также запуска только на этом новом узле):

functions.database.ref('entries/users/{id}').onCreate((snapshot, context) => {

Теперь вы можете использовать context.params.id, чтобы получить этоID, и легче писать под этим новым узлом.

0 голосов
/ 30 октября 2019

Все, что мне нужно было сделать, это передать параметр в мой URL-адрес.

exports.addUser = functions.https.onRequest(async (req, res) => { //Adds data from the form to the database
  cors(req, res, async () => {
    // Grab the message body parameter.
    const entry = req.body;
    // Push the new message into the Realtime Database using the Firebase Admin SDK.
    const snapshot = await admin.database().ref('entries/users/').push(entry);

    console.log('my new shiny id is ' + snapshot.key());
    // Redirect with 303 SEE OTHER to the URL of the pushed object in the Firebase console.
    res.redirect(303, snapshot.ref.toString());
  })
});

//Function to generate a random ID and update into the entry from the form on the database.
exports.generateID = functions.database.ref('entries/users/{id}').onCreate((snapshot, context) => {
  const dev = '0eeb94ca-3426-46ca-964d-a9bdd7d00ef0';
  var random = Math.random().toString(36).substring(7);
  const code = uuidv5('user-' + random, dev);
  return snapshot.ref.update({
    userID: code
  });
})

{id} будет использоваться в качестве параметра для идентификатора, созданного методом .push(). Функция обновит ввод данных сгенерированным идентификатором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...