Про предыдущую историю мы уже говорили о том, как установить и выполнить базовый запрос данных из 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
Спасибо!!