【发布时间】:2015-08-18 16:00:18
【问题描述】:
在使用 angularjs、mongoose 或 MongoLab 时遇到一些问题。如果同时对不同的 api 路由进行两次 api 调用,数据将不会加载。所以我通过等待每个电话完成(承诺)在拨打下一个电话之前让它工作。这种方式对我来说听起来并不好,因为如果任何调用失败,那么页面的其余部分将不会加载。无论如何我可以避免等待吗?这是我现在得到的一个例子。
AngularJS 控制器工作代码:
// get profiles
HomeServices.getProfile()
.then(function (result) {
$scope.profiles = result.data;
// get portfolios
HomeServices.getPortfolios()
.then(function (result) {
$scope.portfolios = result.data;
}, function (error) {
console.log(error.statusText);
});
}, function (error) {
console.log(error.statusText);
});
API:
// profile api
api.get('/profiles', function (req, res) {
// model schema
var profile = require('../models/Profile');
// create db connection
var db = mongoose.createConnection(config.server.db);
// set model
var model = db.model('profile', profile, 'Profiles');
// find videos
model.find({}, function (err, data) {
if (err) {
res.status(500).send(err);
} else {
res.status(200).send(data);
}
// disconnect db
mongoose.disconnect();
});
});
// portfolio api
api.get('/portfolios', function (req, res) {
// model schema
var portfolio = require('../models/Portfolio');
// create db connection
var db = mongoose.createConnection(config.server.db);
// set model
var model = db.model('portfolio', portfolio, 'Portfolios');
// find videos
model.find({}, function (err, data) {
if (err) {
console.log(err);
res.status(500).send(err);
} else {
res.status(200).send(data);
}
// disconnect db
mongoose.disconnect();
});
});
这是我想要做的:
// get profiles
HomeServices.getProfile()
.then(function (result) {
$scope.profiles = result.data;
}, function (error) {
console.log(error.statusText);
});
// get portfolios
HomeServices.getPortfolios()
.then(function (result) {
$scope.portfolios = result.data;
}, function (error) {
console.log(error.statusText);
});
这是我从 MongoLab 得到的错误:
{ [MongoError: server mongolab.com:59661 sockets closed] name: 'MongoError', message: 'server db... sockets closed' }
更新:通过删除 mongoose.disconnect();一切都按需要工作。但我不想在每个端点都创建连接。
【问题讨论】:
-
为什么要连接/断开每个端点的数据库?我不熟悉该错误,但我猜它来自您尝试同时建立 2 个数据库连接的事实。
-
我是新手,这意味着堆栈。我删除了猫鼬断开连接,现在它工作正常。现在的问题是在哪里/如何创建数据库连接?
-
我在应用初始化时创建了数据库连接。您的问题发生了重大变化,我建议将其作为一个新问题提出,而不是将其从一个问题转变为另一个问题。 (提示:上述问题可能已经在 SO 上提出并回答)
标签: angularjs node.js mongodb mongoose mlab