javascript - 无法读取未定义 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()
解决方案
问题是addAnimal()
调用是在建立连接之前执行的。传递给的回调client.connect
是异步的——它将“稍后”执行。到您调用addAnimal
回调时(尚未),因此animals
仍未定义。
一个解决方案是像这样addAnimal
放入client.connect
回调中:
client.connect(() => {
db = client.db('test');
animals = db.collection('animals');
addAnimal();
});
推荐阅读
- javascript - 意外的令牌功能 + Gulpfile 中的缩小文件
- optimization - 哪种数据结构?
- java - 在 Hadoop 中运行 map-reduce jar 的替代方案
- android - 如何为其他语言创建景观 strings.xml
- docker - Docker 日志不可读
- outlook - 如何禁用 Outlook 2013 桌面版的 Outlook 加载项
- java - 如何在 Elasticsearch 中正确插入 GeoPoint?
- java - Android Manifest 怎么会再次合并?
- python - 使用来自另一个数据帧的相应数据填充列值(合并??)
- sql - 如何在 SQL 中选择层次关系的顶层?