javascript – 从客户端控制器(MEAN.JS)指定Mongo查询参数

我正在使用MongoDB,Angular,Express和Node(MEAN堆栈)构建应用程序.

我使用MEAN.JS生成器来构建我的应用程序.

我将使用文章模块作为参考.

假设我的文章集合中有7000条记录,每条记录都有一个与之关联的日期.每次加载页面以查看表中的记录时,将所有7000条记录加载到内存中是低效的,因此我看到了可怕的性能损失.出于这个原因,我只想加载日期范围为(1个月前)到(从现在起1年)的记录,并将其显示在表格中.我现在可以使用以下内容执行此操作:

在我的articles.client.controller.js中:

$scope.find = function() {
        $articles = Articles.query();
};

…在我的articles.server.controller.js中:

var Now = new Date();
var aYearFromNow = new Date(Now.getTime() + 86400000*365); //add a year
var aMonthAgo = new Date(Now.getTime() - 86400000*30); //subtract roughly a month

exports.list = function(req,res) { Article.find().where('date').lt(aYearFromNow).gt(aMonthAgo).sort('-created').populate('user','displayName').exec(function(err,articles) {
        if (err) {
            return res.send(400,{
                message: getErrorMessage(err)
            });
        } else {
            res.jsonp(articles);
        }
    });
};

问题是,这不是一种动态的做事方式.换句话说,我希望用户能够指定他们想要看到多远和多远.

如何在我的客户端视图中绑定变量(例如’aYearFromNow’和’aMonthAgo’),这将改变我的服务器控制器中的查询参数?

解决方法

它可能不是最干净的方式,但您可以创建一个新服务(或编辑当前的服务以使用几个参数):
.factory('ArticlesService2',['$resource',function($resource) {
        return $resource('articles/:param1/:param2',{
            param1: '',param2: ''
        },{
            update: {
                method: 'PUT'
            }
        });
    }
]);

然后在你的控制器中调用它:

$scope.findWithParams = function() {
    $scope.article = ArticlesService2.query({
        param1: $scope.aYearFromNow,param2: $scope.aMonthAgo
    });
};

在后端,您需要准备一条路线:

app.route('/articles/:param1/:param2')
    .get(articles.listWithParams)

向后端控制器添加一个功能

exports.listWithParams = function(req,res) {
    Article.find()
    .where('date')
    .lt(req.params.param1)
    .gt(req.params.param2)
    .sort('-created').populate('user','displayName')
    .exec(function(err,{
                message: getErrorMessage(err)
            });
        } else {
            res.jsonp(articles);
        }
    });
};

应该工作,但没有测试过.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...