Angularjs 调用两个不同api时的平均堆栈错误';同时,我们也会选择不同的路线

Angularjs 调用两个不同api时的平均堆栈错误';同时,我们也会选择不同的路线,angularjs,node.js,mongodb,mongoose,mlab,Angularjs,Node.js,Mongodb,Mongoose,Mlab,与angularjs、mongoose或MongoLab有一些问题。如果一个应用程序同时对不同的api路由进行两次api调用,则不会加载数据。因此,我在打下一个电话之前,等待每一个电话都结束(带着承诺),从而让它工作起来。这种方式对我来说听起来不太好,因为如果任何一个调用失败,那么页面的其余部分将无法加载。我能避免等待吗?这是我现在得到的一个例子 AngularJS控制器工作代码: // get profiles HomeServices.getProfile()

与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);
            });
空气污染指数:

// 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();一切都按需要进行。但我不想在每个端点上创建连接。

我相信错误来自mongo连接的不断创建/关闭。要在多个端点上维持单个连接,请执行以下操作:

var Portfolio = require("../models/Portfolio")
var Profile = require("../models/Profile")
var db = mongoose.connect(config.server.db)

db.connection.once("connected", function() {

    api.get("/profiles", function(req, res) { ... });

    api.get("/portfolios", function(req, res) { ... });
});
您正在使用
createConnection()
,它用于创建到多个数据库的连接。从这些端点判断,您可能不需要这样做。我会使用
connect()
。 我建议阅读更多关于连接的内容


另外,我在文件顶部定义了公文包和概要文件,因为它们可能在不同的端点上重复。

为什么要在每个端点连接/断开与db的连接?我对这个错误不太熟悉,但我猜这是因为您试图同时建立2 db连接。我对这方面是新手。我移除了猫鼬的断开装置,现在它可以正常工作了。现在的问题是在哪里/如何创建数据库连接?我在应用程序初始化时创建db连接。你的问题已经发生了很大的变化,我建议你把它作为一个新问题来问,而不是把这个问题从一个问题变成另一个问题。(提示:上述问题可能已经在此处提出并回答过)