MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Conectando-se ao MongoDB Atlas a partir de funções do firebase


Há algumas ressalvas ao conectar-se ao Atlas a partir do Firebase Function. Abaixo está a maneira correta de retornar uma instância de cliente conectada para uso posterior em sua função 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
}

Explicação:

  1. supostamente, você não pode se conectar ao Atlas se estiver em um Spark plano. Certifique-se de atualizar para o Blaze se ainda não o fez.

  2. uri string – Você não deve usar o formato de URL abreviado ao se conectar ao Atlas do Firebase. Por algum motivo, apenas o formato de URL longo e antigo funciona de maneira confiável no Firebase.

  3. client variável – Você deve definir o client variável fora do escopo de exportação e, em seguida, atribua a instância do cliente conectada a ela dentro da função, somente se ela ainda não estiver atribuída. Isso impedirá a reconexão do cliente em cada chamada de função. As funções do Firebase são sem estado , mas não totalmente. eles só são desligados após algum período de inatividade. Isso significa que a conexão persistirá por algum tempo. Dos documentos :Se você declarar uma variável no escopo global, seu valor poderá ser reutilizado em invocações subsequentes sem precisar ser recalculado.