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

Есть проблема, в файле 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 В базу данных ничего не кладётся, код завершается. Буду рад, если подскажете, где ошибка.


Ответы (1 шт):

Автор решения: Cipher

В вашем коде переменная 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

→ Ссылка