【发布时间】:2017-05-04 18:32:20
【问题描述】:
我正在使用由 mLab 和 Node.js 托管的 MongoDB,以及 express 和 TypeScript。我的问题是,当我运行我的服务器时,我只能向数据库发出一个请求,并且任何后续请求都会抛出 “拓扑已破坏。”这是我的代码的样子。
export function getTeamName(id: string, callbackSuccess: (name) => void, callbackError?: (error) => void) {
initDb(() => {
db.collection('teams', (err: Error, teams) => {
if (err) { callbackError(err); db.close(); return; }
else {
teams.findOne({ '_id': id }, { 'name': 1 }, (error, name) => {
if (error) { callbackError(error); db.close(); return; }
else { callbackSuccess(name); db.close(); }
});
}
})
}, (err) => {
callbackError(err);
})
}
还有initDb() 方法:
import { Server, Db } from 'mongodb'; //using mongodb typings
var server = new Server("*******.mlab.com", *****, { auto_reconnect: false });
var db = new Db('serverName', server, { w: 1 });
function initDb(callbackSuccess: (data) => void, callbackError?: (err) => void) {
db.open((err, db) => {
if (err) {
callbackError(err);
}
else {
db.authenticate("username", "password", (error, data) => {
if (error) {
callbackError(err);
}
else {
callbackSuccess(data);
}
});
}
});
}
感谢您的帮助。
【问题讨论】:
-
“拓扑被破坏”通常意味着您的应用程序在关闭连接后尝试重新使用它。见stackoverflow.com/questions/30909492/…。您的应用程序的任何部分是否关闭了数据库连接?
-
就是这样。我的网络有防火墙阻止连接到 mLab。
标签: node.js mongodb google-app-engine express typescript