首页 > 解决方案 > 无法读取未定义 MongoDB 的属性“insertOne”

问题描述

我想在 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()

标签: javascriptnode.jsmongodb

解决方案


问题是addAnimal()调用是在建立连接之前执行的。传递给的回调client.connect是异步的——它将“稍后”执行。到您调用addAnimal回调时(尚未),因此animals仍未定义。

一个解决方案是像这样addAnimal放入client.connect回调中:

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

推荐阅读