sql >> Base de Datos >  >> NoSQL >> MongoDB

Conexión a MongoDB Atlas desde las funciones de base de fuego

Hay algunas advertencias al conectarse a Atlas desde Firebase Function. A continuación se muestra la forma correcta de devolver una instancia de cliente conectada para su uso posterior en su función FB:

import { MongoClient } from 'mongodb'

const uri = 'mongodb://<USER>:<PASSWORD>@foo-shard-00-00-xxx.gcp.mongodb.net:27017,foo-shard-00-01-xxx.gcp.mongodb.net:27017,foo-shard-00-02-xxx.gcp.mongodb.net:27017/test?ssl=true&replicaSet=FOO-shard-0&authSource=admin&retryWrites=true'

let client

export default async () => {

    if (client && client.isConnected()) {
        console.log('DB CLIENT ALREADY CONNECTED')

    } else try {
        client = await MongoClient.connect(uri, { useNewUrlParser: true })
        console.log('DB CLIENT RECONNECTED')
    }

    catch (e) {
    throw e
    }

    return client
}

Explicación:

  1. según se informa, no puede conectarse a Atlas si está en un Spark plan. Asegúrate de actualizar a Blaze si aún no lo hiciste.

  2. uri cadena:no debe usar el formato de URL abreviado cuando se conecta a Atlas desde Firebase. Por alguna razón, solo el formato de URL largo más antiguo funciona de manera confiable desde firebase.

  3. client variable:debe definir el client variable fuera del ámbito de exportación y, a continuación, asígnele la instancia de cliente conectada dentro de la función, solo si aún no está asignada. Esto evitará volver a conectar al cliente en cada invocación de función. Las funciones de Firebase son sin estado , pero no del todo. solo se apagan después de un período de inactividad. Esto significa que la conexión persistirá durante algún tiempo. De documentos :si declara una variable en ámbito global, su valor se puede reutilizar en invocaciones posteriores sin tener que volver a calcularlo.