Имея некоторые проблемы с angularjs, mongoose или MongoLab. Если вы делаете два вызова api на другой маршрут api одновременно, данные не будут загружаться. Поэтому я получил работу, ожидая завершения каждого звонка (с обещанием) перед тем, как сделать следующий звонок. Этот способ для меня не подходит для меня, потому что, если какой-либо из вызовов завершится неудачей, остальная часть страницы не будет загружаться. В любом случае я могу избежать ожидания? Вот пример того, что я получил прямо сейчас.MEAN Stack Ошибка при одновременном вызове двух разных маршрутов 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(); все работает по мере необходимости. Но я не хочу создавать соединение на каждой конечной точке.
Почему вы подключаете/отсоединяете от db в каждой конечной точке? Я не знаком с ошибкой, но я предполагаю, что это происходит из-за того, что вы пытаетесь установить соединения 2 db одновременно. – cdbajorin
Я новичок в этом случае. Я удалил разъединение мангуста, и теперь он отлично работает. Вопрос в том, где/как создать соединение с базой данных? – iamrelos
Я создаю соединение db при инициализации приложения. Ваш вопрос сильно изменился, я предлагаю задать его как новый вопрос, а не преобразовывать его из одного в другой. (подсказка: вопрос, скорее всего, уже был задан и ответил здесь на SO) –