FireStore 1.0 не возвращается Firestore timestamp - PullRequest
0 голосов
/ 05 июня 2018

Раньше мой код работал нормально и возвращал значение Long для метки времени из хранилища.Начиная с выпуска Firestore 1.0, код возвращает [object Object] в результате.Хотя он сохраняет временную метку как June 5, 2018 at 10:38:44 AM UTC+3, что означает, что в настоящее время она не сохраняется как значение long в базе данных firestore.Я пробовал некоторые возможные решения с прошлой ночи, но не работает.Есть ли решение?

exports.get_time = functions.https.onRequest((request, response) => {
    // if (!request.headers.authorization) {
    //     console.error('No Firebase ID token was passed');
    //     response.status(403).send('Unauthorized');
    //     return;
    // }
    var fieldValue = require("firebase-admin").firestore.FieldValue;
    db.collection('times').doc('servertime').set({servertime: fieldValue.serverTimestamp()}).then((ref) => {
        db.collection('times').doc('servertime').get().then((snapshot) => {
            response.writeHead(200, {"Content-Type": "text/plain"});
            response.write(String(snapshot.data()));
            response.end();
            return null;
        }).catch((error) => {
            response.writeHead(404, {"Content-Type": "text/plain"});
            response.write("Error\n" + error);
            response.end();
        });
        return null;
    }).catch((error) => {
        response.writeHead(404, {"Content-Type": "text/plain"});
        response.write("Error\n" + error);
        response.end();
    });
});

1 Ответ

0 голосов
/ 05 июня 2018

Ваша проблема может быть связана с изменениями, которые были внесены в недавний выпуск Firestore SDK (версия 5.0.3 для JavaScript SDK):

В этом выпуске изменилось поведение объектов Date, хранящихся в Firestore: «timestamps»хранящиеся в Cloud Firestore считываются как объекты временной метки Firebase, а не как объекты системной даты. "

Вам нужно «обновить код, ожидающий дату, вместо того, чтобы ожидать метку времени», следующим образом:

  // Old:
  const date = snapshot.get('created_at');  // <- 'created_at' is an example of field name

  // New:
  const timestamp = snapshot.get('created_at');
  const date = timestamp.toDate();

Кроме того, вы должны также цеплять свои обещания немного по-другомуКак изменить способ отправки ответа.Вы можете посмотреть следующее видео для получения дополнительной информации о том, как написать функцию HTTP: https://www.youtube.com/watch?v=7IkUgCLr5oA

exports.get_time = functions.https.onRequest((request, response) => {

    var fieldValue = require("firebase-admin").firestore.FieldValue;

    db.collection('times').doc('servertime').set({servertime: fieldValue.serverTimestamp()})
        .then((ref) => {

            return db.collection('times').doc('servertime').get();

        })
        .then((snapshot) => {
            response.send(snapshot.data());
            // return null;  no need to return here since it is an HTTP Function
        })
        .catch((error) => {
            response.status(500).send(error)
        });
}); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...