MongoDB Atlas: client.db не является функцией - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь подключиться к MongoDB atlas в узле с помощью клиента "mongodb": "^ 3.5.5", следуя этому руководству Я получаю журнал console.log('connected to db'), но когда я пытаюсь для вызова find() я получаю сообщение об ошибке client.db is not a function

const { MongoClient } = require('mongodb');
const express = require("express");
const app = express();
const cors = require("cors");
require("dotenv").config();

// Connect to MongoDB
 const connectClient = async() => {
  const client = new MongoClient(process.env.MONGODB_CONNECTION_URI);
  try {
      await client.connect();
      console.log('connected to db')
      return client;
  } catch (e) {
      console.error(e);
  } finally {
      await client.close();
  }
}
const client = connectClient();

const find = async() => {
  try {
    const cursor = client.db('meetings').collection('inperson').find();
    const results = await cursor.toArray();
    return results
  } catch (err) {
    console.log(err)
  }
}

app.use(cors());

app.get("/get-meetings", (req, res) => {
  const results = find();
  res.status(200).send({ results });
});

app.listen(8081, () => console.log("Server running on 8081"));

URI подключения выглядит как

mongodb+srv://meetingsAPI:ad69xOfovSxAQaD5@meetings-gntor.gcp.mongodb.net/meetings?retryWrites=true&w=majority

1 Ответ

0 голосов
/ 03 апреля 2020

Ваша функция connectClient возвращает обещание, потому что это асин * c функция. Когда вы делаете это:

const client = connectClient();

переменная «клиент» указывает на само обещание, а не на разрешенное значение. Вот почему у него нет свойства .db. Для того, чтобы заставить работать ожидание, вам нужно обернуть весь код в «выражение немедленно вызванной функции», например:

//Make sure any code before this ends with seimicolon
(async()=>{
    //code...
    const client = await connectClient();
    //code...
    app.listen(8081, () => console.log("Server running on 8081"));

})()

Есть, конечно, альтернативы этому, но я думаю, что это лучший подходить. Вы можете посмотреть здесь: https://dev.to/codeprototype/async-without-await-await-without-async--oom

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