Mic*_*hel 5 heroku mongodb parse-server
在Heroku上运行应用程序时,将Parse-Server与mLab一起使用,我在日志中收到以下错误:
app[web.1]: /app/node_modules/parse-server/lib/ParseServer.js:481
app[web.1]: throw err;
app[web.1]: ^
app[web.1]: MongoError: connection destroyed, not possible to instantiate cursor
app[web.1]: at nextFunction (/app/node_modules/mongodb-core/lib/cursor.js:607:55)
app[web.1]: at Cursor.next [as _next] (/app/node_modules/mongodb-core/lib/cursor.js:692:3)
app[web.1]: at fetchDocs (/app/node_modules/mongodb/lib/cursor.js:856:10)
Run Code Online (Sandbox Code Playgroud)
为了使事情变得更加复杂,在运行相同代码的同时,我不会一直都这样。
在网上搜索后,我发现尝试从数据库中读取100多个记录时会发生这种情况。这似乎与我观察到的一致。
不幸的是,我在网络上找不到任何解决该问题的方法。因此,我的问题是:我该如何处理此问题?
有什么办法可以将阈值从100提高到更高的值?或任何其他解决此问题的好方法?
如果这在这里可能有用,则执行该功能的代码。在大多数情况下,它像魅力一样工作。当提供的typKey恰巧匹配太多记录时,我遇到了上面提到的问题。
function get_List(displayPage, db, response) {
db.collection('TheCollection', function (err, collection) {
collection.find({"typeKey": "TYPE01"}).toArray(function(err, items) {
if(err) throw err;
response.render('pages/displayList.ejs', {
dataArray: items
});
});
});
}
Run Code Online (Sandbox Code Playgroud)
您需要确保在光标完全清空后调用 close() 。您可以通过确保使用 async/await 或 Promise、.then() 来做到这一点,以便在关闭 mongo 集合之前有机会完全写出响应
放置延迟以确保光标已完全完成是非常粗鲁的,并且可能会给您带来奇怪的错误。
如果您有权访问 async/await,请将 get_list() 函数设置为异步,并确保在关闭连接之前等待它的响应。否则,将其包装在 Promise 中,并且仅在 Promise 解决时才关闭连接。例如
function get_List(displayPage, db, response) {
db.collection('TheCollection', function (err, collection) {
collection.find({"typeKey": "TYPE01"}).toArray(function(err, items) {
if(err) throw err;
response.render('pages/displayList.ejs', {
dataArray: items
});
});
});
}
async function whichCallsget_List(request response) => {
try {
var client = await MongoClient.connect(
mongourl,
{ useNewUrlParser: true }
)
const db = await client.db(process.env.DB_NAME)
await get_List('displayPage', db, response)
db.close();
} catch (reason) {
// error handling
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4242 次 |
| 最近记录: |