Про предыдущую историю мы уже говорили о том, как установить и выполнить базовый запрос данных из MongoDB. в этой истории я расскажу как подключить MongoDB к Node JS. Если вы пропустили мою последнюю историю, я положу сюда свою последнюю историю.



Чтобы подключить MongoDB к Node JS, вам необходимо установить модуль MongoDB внутри вашего проекта. Чтобы установить модуль MongoDB, вы можете использовать эту команду

const { MongoClient } = require('mongodb');

После завершения установки мы настроим файл JS, чтобы подключить его к базе данных. мы можем объявить несколько деталей из нашей базы данных, например

const { MongoClient } = require("mongodb");
const url = "mongodb://localhost:27017";
const mongo = new MongoClient(url);
const databaseName = "whatsapp";

не забудьте запустить локальную базу данных, чтобы она заработала. здесь я объявил свою базу данных на основе базы данных моего локального сервера. Как видите, мой локальный сервер находится на localhost:27017. это то же самое, что и детали моего MongoCompass

затем нам нужно подключить наши модули Mongo к нашей локальной базе данных. Для этого добавим эту часть кода в наш JS-файл.

const getAll = (collsName) => new Promise(async (resolve, reject) => {
    await mongo.connect();
    console.log("Connected successfully to server");

    const db = mongo.db(databaseName);
    const collection = db.collection(collsName);

    var result = await collection.find({}).toArray();
    await mongo.close();

    resolve(result);
});

здесь мы создали новую функцию с параметром collsName, в которую мы поместим имя коллекции. поэтому нам не нужно создавать новую функцию, которая делает то же самое (функция многократного использования: D). здесь, как вы можете видеть, мы соединяем базу данных с данными базы данных, которые мы объявили ранее.

await mongo.connect();
console.log("Connected successfully to server");

const db = mongo.db(databaseName);

перед доступом к базе данных нам нужно открыть соединение между нашим скриптом и MongoDB. затем, если процесс прошел успешно, код переходит к соединению с базой данных. например, имя моей базы данных — «whatsapp», которое хранится в переменной databaseName. здесь мы назвали имя_базы_данных для подключения к базе данных «whatsapp».

const collection = db.collection(collsName);

затем, после того как мы объявили, что хотим подключиться к базе данных «whatsapp», нам нужно было выбрать, из какой коллекции мы хотим получить данные. здесь мы используем переменную collsName. Эта переменная является динамической на основе того, что мы вводим в параметре getAll. Например, моя коллекция «родители», поэтому модуль будет получать данные из коллекции «родители».

var result = await collection.find({}).toArray();

в этом коде мы находим данные в нашей коллекции (из предыдущего кода мы объявляем переменную как «родительскую» коллекцию) и получаем данные в виде массива для хранения данных. вот пример полного кода

затем запустите файл JS, чтобы увидеть результат ❤️

Код рабочий?? Нет??

Ха-ха, я тоже получаю те же ошибки при первом запуске :D, если у вас не было ошибок, вы особенный ❤️

вот что у меня получилось :')

PS E:\Developments\Applications\Node App\whatsappjs-learn> 
 *  History restored 

E:\Developments\Applications\Node App\whatsappjs-learn\node_modules\mongodb\lib\sdam\topology.js:278
                const timeoutError = new error_1.MongoServerSelectionError(`Server selection timed out after ${serverSelectionTimeoutMS} ms`, this.description);
                                     ^

MongoServerSelectionError: connect ECONNREFUSED ::1:27017
    at Timeout._onTimeout (E:\Developments\Applications\Node App\whatsappjs-learn\node_modules\mongodb\lib\sdam\topology.js:278:38)
    at listOnTimeout (node:internal/timers:569:17)
    at process.processTimers (node:internal/timers:512:7) {
  reason: TopologyDescription {
    type: 'Unknown',
    servers: Map(1) {
      'localhost:27017' => ServerDescription {
        address: 'localhost:27017',
        type: 'Unknown',
        hosts: [],
        passives: [],
        arbiters: [],
        tags: {},
        minWireVersion: 0,
        maxWireVersion: 0,
        roundTripTime: -1,
        lastUpdateTime: 87142270,
        lastWriteDate: 0,
        error: MongoNetworkError: connect ECONNREFUSED ::1:27017
            at connectionFailureError (E:\Developments\Applications\Node App\whatsappjs-learn\node_modules\mongodb\lib\cmap\connect.js:367:20)
            at Socket.<anonymous> (E:\Developments\Applications\Node App\whatsappjs-learn\node_modules\mongodb\lib\cmap\connect.js:290:22)
            at Object.onceWrapper (node:events:628:26)
            at Socket.emit (node:events:513:28)
            at emitErrorNT (node:internal/streams/destroy:151:8)
            at emitErrorCloseNT (node:internal/streams/destroy:116:3)
            at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
          cause: Error: connect ECONNREFUSED ::1:27017
              at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1494:16) {
            errno: -4078,
            code: 'ECONNREFUSED',
            syscall: 'connect',
            address: '::1',
            port: 27017
          },
          [Symbol(errorLabels)]: Set(1) { 'ResetPool' }
        },
        topologyVersion: null,
        setName: null,
        setVersion: null,
        electionId: null,
        logicalSessionTimeoutMinutes: null,
        primary: null,
        me: null,
        '$clusterTime': null
      }
    },
    stale: false,
    compatible: true,
    heartbeatFrequencyMS: 10000,
    localThresholdMS: 15,
    setName: null,
    maxElectionId: null,
    maxSetVersion: null,
    commonWireVersion: 0,
    logicalSessionTimeoutMinutes: null
  },
  code: undefined,
  [Symbol(errorLabels)]: Set(0) {}
}


согласно тому, что я нашел в Интернете, это потому, что моя версия узла новее и не работает. этот код подойдет для Node v14, а мой Node — v18 :’), но не беспокойтесь. у них супер простое решение :D

from this code
const url = "mongodb://localhost:27017";


to this code
const url = "mongodb://0.0.0.0:27017";

затем перезапустите код, не забудьте помолиться :D

PS E:\Developments\Applications\Node App\whatsappjs-learn> node .\mongo.js
Connected successfully to server
[
  {
    _id: new ObjectId("64bbb3672b4b6fb59d8bbed9"),
    name: 'hehe',
    age: '12'
  },
  {
    _id: new ObjectId("64bbb37f2b4b6fb59d8bbeda"),
    lastname: 'hoho',
    address: 'ansdkwl'
  },
  {
    _id: new ObjectId("64bbc2f3339f712a2eff681a"),
    name: 'John Doe',
    address: '19 Quai de la Tournelle, 75005 Paris, France',
    phone: '6282345678900',
    children: { name: 'Laura Doe', class: '3rd Grade' }
  },
  {
    _id: new ObjectId("64bbc2f3339f712a2eff681b"),
    name: 'Loid Forger',
    address: '128 Park Avenue, West Berlint ',
    age: '30',
    phone: '6282345678900',
    children: { name: 'Anya Forger', class: '3rd Grade' }
  },
  {
    _id: new ObjectId("64bbd20cafcae4e3ba0f2c5e"),
    name: 'new name',
    phone: 123123
  }
]

Поздравляем!! ваш код работает прямо сейчас !!!

благодаря сообществу StackOverflow они спасают жизнь всем разработчикам, таким как мы :’) Я надеюсь, что смогу помочь еще одному человеку в будущем. теперь наш код готов к работе с WhatsApp JS.

вернуться к нашему старому коду. вот напоминание

в нашем старом коде мы изменим parent.json с базой данных Mongo. вы можете просто переместить код внутри этого кода ИЛИ вы можете экспортировать модуль, чтобы код был чище. В этом примере я скопирую весь код, чтобы вы, ребята, которые не слишком хорошо знакомы, тоже могли его понять (так же, как и я, я тоже учусь: D)

как вы можете видеть здесь, я прокомментировал наш старый источник данных (файл JSON) с выбранными данными из MongoDB, чтобы вы могли видеть разницу между переменными. то, как мы получаем доступ к базе данных, очень похоже на файл JSON, мы обращаемся к объекту телефона, чтобы получить номер телефона. Если мы выполним маршрут /send-whatsapp-notification, наш код отправит сообщение на основе данных коллекции с объектом телефона в нем. Обратите внимание, что он не будет отправлять сообщение WhatsApp в данные без объекта телефона. Например, если у вас есть 5 таких данных

{
  _id: ObjectId("64bbb3672b4b6fb59d8bbed9"),
  name: 'hehe',
  age: '12'
}
{
  _id: ObjectId("64bbb37f2b4b6fb59d8bbeda"),
  lastname: 'hoho',
  address: 'ansdkwl'
}
{
  _id: ObjectId("64bbc2f3339f712a2eff681a"),
  name: 'John Doe',
  address: '19 Quai de la Tournelle, 75005 Paris, France',
  phone: '6282345678900',
  children: {
    name: 'Laura Doe',
    class: '3rd Grade'
  }
}
{
  _id: ObjectId("64bbc2f3339f712a2eff681b"),
  name: 'Loid Forger',
  address: '128 Park Avenue, West Berlint ',
  age: '30',
  phone: '6282345678900',
  children: {
    name: 'Anya Forger',
    class: '3rd Grade'
  }
}
{
  _id: ObjectId("64bbd20cafcae4e3ba0f2c5e"),
  name: 'new name',
  phone: 123123
}

он будет отправлять только 3 данные, в которых есть телефонный объект, потому что в других 2 нет телефонного объекта. Итак, это моя история на сегодня, надеюсь, вам понравилось :D

Спасибо!!