Невозможно прочитать свойство 'insertOne' из undefined, MongoDB - PullRequest
0 голосов
/ 09 мая 2020

Я хотел написать свое первое приложение с помощью node.js и MongoDB. К сожалению, я не знаю, что делаю не так. Спасибо за все советы.

const prompt = require('prompt-sync')();
const mongo = require('mongodb');
const client = new mongo.MongoClient('mongodb://localhost:27017', {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});

var db;
var animals;
client.connect(() => {
  db = client.db('test');
  animals = db.collection('animals');
});


addAnimal = () => {
  const animalName = prompt('Name: ');
  const ageAnimal = prompt('Age: ');
  animals.insertOne(
    {
      nameAnimal: animalName,
      age: ageAnimal,
    },
    (err) => {
      if (err) {
        console.log('Error');
      } else {
        console.log('Added!');
      }
    }
  );
};
addAnimal()

1 Ответ

2 голосов
/ 09 мая 2020

Проблема в том, что вызов addAnimal() выполняется до установления соединения. Обратный вызов, переданный в client.connect, имеет вид asyn c - он выполнится «позже». К тому времени, когда вы вызываете addAnimal, обратный вызов не был выполнен (еще), и поэтому animals все еще не определено.

Решением было бы поместить addAnimal в обратный вызов client.connect следующим образом:

client.connect(() => {
  db = client.db('test');
  animals = db.collection('animals');
  addAnimal();
});
...