MongoDB получает undefined при поиске

Я хочу использовать все значения, которые

bericht.find({
        room: room
      }).toArray(function(err, docs) {
        assert.equal(err, null);
        str2 = str2 + docs.message;

Эту функцию можно найти, единственная проблема в том, что я все время получаю undefined. Но я хочу использовать значения и socket.emit для размера клиента, чтобы там можно было использовать все сообщения. Кто-нибудь может мне помочь? Как я могу это сделать.

const url = 'mongodb://localhost:27017';

io.on('connection', (socket) => {

    var str2 = [];

    // Database Name
    const dbName = 'chatapplication';


    const findMessageFromRoom = function(room, db, callback) {
      // Get the messages from certain room
      const bericht = db.collection('Bericht');
      // Find some documents
      bericht.find({
        room: room
      }).toArray(function(err, docs) {
        assert.equal(err, null);
        str2 = str2 + docs.message;
        // callback(docs);
      });
      console.info(str2);
      socket.emit('test1', str2);
    };

    function getAllMessagesInRoom(room) {
      MongoClient.connect(url, function(err, client) {
        assert.equal(null, err);
        console.info("Connected successfully to server");

        const db = client.db(dbName);

        findMessageFromRoom(room, db, function() {
          client.close();
        });

      });
    }

  )
};
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Node.js является асинхронным, он не будет ждать завершения запроса к базе данных, просто немедленно регистрирует переменную str2. В то время он не определен, поэтому на консоли появляется сообщение «undefined».

Используйте это так:

bericht.find({
    room: room
}).toArray(function(err, docs) {
    assert.equal(err, null);
    str2 = str2 + docs.message;
    // callback(docs);

    console.info(str2);
    socket.emit('test1', str2);
});

Другие вопросы по теме