javascript и mongodb: Cannot read property 'insertOne' of undefined

122
11 апреля 2022, 06:50

Есть проблема, в файле db.js есть такой код:

const mc = require('mongodb').MongoClient; 
var db; 
 
function connect(uri) { 
    var client = new mc(uri, { useNewUrlParser: true, useUnifiedTopology: true }); 
    client.connect(err => { 
        if (err) return console.error(err); 
        db = client.db("test").collection("test"); 
        console.log("Connected"); 
    }); 
} 
 
function insert(data) { 
    db.insertOne(data, (err) => { 
        if (err) return console.error(err); 
        console.log("Inserted " + data); 
    }); 
} 
 
module.exports.connect = connect; 
module.exports.insert = insert;

Но при запуске из другого файла (

const db = require('./db');
db.connect();
db.insert({testing: true});

)

происходит ошибка: Cannot read property 'insertOne' of undefined В базу данных ничего не кладётся, код завершается. Буду рад, если подскажете, где ошибка.

Answer 1

В вашем коде переменная db объявляется всего два раза:

  1. Это глобально, без присвоения ей какого либо значения:
const mc = require('mongodb').MongoClient;
var db;
  1. В функции connect
        db = client.db("test").collection("test");
        console.log("Connected");

Поэтому когда вы вызываете функцию insert , в которой параметр bd не определен, javascript берет его из глобальной области видимости, но там Вы не задали ему какое-либо значение, а проста задекларировали переменную используя var, поэтому значение у нее undefined. Что бы поправить ошибку поместите db = client.db("test").collection("test"); в тело функции insert

READ ALSO
Объединение объектов javascript

Объединение объектов javascript

Имеется массив объектов:

103
discord.js mysql cooldown

discord.js mysql cooldown

Как сделать кулл даун? пример: Пользователь пишет daily данные записываются в дб и создается кулдаун например на 12 часовесли он пишет команду...

149
Поиск верхнего родителя

Поиск верхнего родителя

Есть массив ОбъектовВ объекте данные об имени, id и если есть родительский элемент, то еще и родительский элемент

298
Ajax метод POST не отправляет на сервер данные

Ajax метод POST не отправляет на сервер данные

Дело в том, что ajax не отправляет данные на серверПодскажите пожалуйста из-за чего такое может быть

171