我创建了一个MongoDB Atlas集群,在其中放置了一些数据,然后创建了一个节点/表达式应用程序以从该集群中检索数据。我可以在本地检索正确的数据,但是当我将节点服务器部署到AWS Elastic Beanstalk时,会出现以下错误:
TypeError:无法读取未定义的属性“ find”
我不确定如何追踪我遇到的这个问题。
const MongoClient = require('mongodb').MongoClient;
let database;
MongoClient.connect(
'url-to-cluster',
{useNewUrlParser: true, useUnifiedTopology: true},
(err, client) => {
const users = client.db('entity');
database = users.collection('entityinfo');
});
// Used in app.use method
database.find().toArray()
.then(results => {
res.json(results[0].UID);
});
答案 0 :(得分:0)
对MongoClient.connect
的调用是异步的,它将立即返回并仅在连接解析后才调用提供的回调。
为了说明这一点,请在连接之前,回调内部以及查找之前添加日志消息。我相信您会发现在给database
赋值的回调之前会调用find。
这可能在本地起作用,因为连接完成速度足够快,这要在调用find之前完成,但是在连接到云中的服务器时需要花费几毫秒(也许几十毫秒)的时间。即这是一种竞赛条件。
您可以尝试将find调用包含在回调中,例如
MongoClient.connect(
'url-to-cluster',
{useNewUrlParser: true, useUnifiedTopology: true},
(err, client) => {
const users = client.db('entity');
database = users.collection('entityinfo');
// Used in app.use method
database.find().toArray()
.then(results => {
res.json(results[0].UID);
});
});