webhook trigger only functions example docs deploy node.js firebase firebase-realtime-database google-cloud-functions firebase-admin

node.js - trigger - firebase functions example



¿Cómo obtengo la marca de tiempo del servidor en Cloud Functions para Firebase? (4)

Sé que puede extraer la marca de tiempo del servidor en web, iOS y Android, pero ¿qué pasa con las nuevas funciones de nube para Firebase? No puedo averiguar cómo obtener la marca de tiempo del servidor allí? Caso de uso es que quiero marcar la hora de un correo electrónico cuando llega.

En la web es Firebase.database.ServerValue.TIMESTAMP

¿Pero eso no parece estar disponible en la interfaz del servidor del nodo de funciones?

Creo que es tarde y puede que me esté perdiendo el punto aquí ...

EDITAR

Estoy inicializando asi

admin.initializeApp(functions.config().firebase); const fb = admin.database()

Entonces, se llama así ...

Firebase.database.ServerValue.TIMESTAMP

Pero, eso es de una integración del lado del cliente. En Funciones, Firebase no se inicializa de esta manera. He intentado

admin.database().ServerValue.TIMESTAMP

y

fb.ServerValue.TIMESTAMP


Como ya estás usando el SDK de administración, la sintaxis correcta es:

admin.database.ServerValue.TIMESTAMP


Si usa Firebase Admin SDK, aquí tiene la sintaxis correcta (verificada 2017-12-07):

const admin = require(''firebase-admin''); // or // import * as admin from ''firebase-admin''; // Using Cloud Firestore admin.firestore.FieldValue.serverTimestamp() // Using Realtime Database admin.database.ServerValue.TIMESTAMP


Solo para aclarar para futuros lectores:

admin.database.ServerValue.TIMESTAMP devuelve un objeto non-null Object y es un valor de marcador de posición para completar automáticamente la marca de tiempo actual. No contiene la marca de tiempo real. La base de datos reemplazará este marcador de posición cuando ejecutará el comando.

Si lo está utilizando dentro de una database.ref datos.ref, entonces funciona como usted espera y es la forma preferida de ingresar una marca de tiempo:

var sessionsRef = firebase.database().ref("sessions"); sessionsRef.push({ startedAt: firebase.database.ServerValue.TIMESTAMP // this will write ''startedAt: 1537806936331` });

Pero si intenta usarlo fuera de la función de la base de datos (por ejemplo, para devolver el tiempo ahora o hacer algunos cálculos), devolverá un objeto que no puede usar:

console.log(firebase.database.ServerValue.TIMESTAMP) // this will return an [object Object]

Vea más sobre esto en firebase.database.ServerValue y en esta pregunta SO .

Date.now() funciona bien fuera de una función de database si desea usarlo para un cálculo o cualquier otro uso general.

console.log(Date.now()); // this will return 1537806936331

Ambos utilizan un unix time que es el número de segundos que han transcurrido desde las 00:00:00, hora universal coordinada (UTC), jueves 1 de enero de 1970, y es irrelevante desde la zona horaria. Es el mismo número en el cliente y en el servidor (... o casi :-). Ver el tiempo de Unix .


Soy nuevo en node.js, pero Date.now() funciona en mis pruebas.

Editar

Entendí mal tu pregunta, no me di cuenta de que querías marcar los datos que estabas almacenando en la base de datos de Firebase. Pensé que simplemente quería tener tiempo en el servidor que ejecutaba su función de nube. Si desea marcar la hora de un correo electrónico recibido almacenado en la base de datos de Firebase, entonces usar admin.database.ServerValue.TIMESTAMP es sin duda el mejor enfoque.

Solo para mi propia educación, escribí la siguiente función para ver cómo se comparan los tiempos. Espero que los tiempos en el servidor de funciones en la nube y en el servidor de bases de datos estén sincronizados con una referencia de tiempo muy precisa. Cuando ejecuto esta función, la marca de tiempo de la base de datos generalmente se encuentra dentro de cien milisegundos del valor de Date.now() . El hecho de que la base de datos de la base de datos sea un poco más tarde es razonable, dado que la función de la nube tarda un poco en conectarse y realizar la escritura.

exports.timeTest = functions.database.ref(''/test/trigger'') .onWrite(event => { const now= Date.now(); console.log(''now='', now); const timeVals = { dateNow : now, serverTimestamp : admin.database.ServerValue.TIMESTAMP }; return event.data.ref.parent.child(''times'').update(timeVals); });