AngularJS 到查询中的 Mongoose 参数

AngularJS to Mongoose params on queries

我正在使用平均堆栈,但我不知道如何将参数从 angular 控制器传递给 mongoose 查询。

根据平均堆栈 (https://github.com/meanjs/mean) 示例,我们有:

在服务器端

一个文章模型

/**
 * Article Schema
 */
var ArticleSchema = new Schema({
    created: {
        type: Date,
        default: Date.now
    },
    title: {
        type: String,
        default: '',
        trim: true,
        required: 'Title cannot be blank'
    },
    content: {
        type: String,
        default: '',
        trim: true
    },
    user: {
        type: Schema.ObjectId,
        ref: 'User'
    }
});

mongoose.model('Article', ArticleSchema);

一个文章控制器,一个函数获取所有文章列表,另一个函数通过Id获取一篇文章

    /**
 * List of Articles
 */
exports.list = function(req, res) {
    Article.find().sort('-created').populate('user', 'displayName').exec(function(err, articles) {
        if (err) {
            return res.status(400).send({
                message: errorHandler.getErrorMessage(err)
            });
        } else {
            res.json(articles);
        }
    });
};

/**
 * Article middleware
 */
exports.articleByID = function(req, res, next, id) {
    Article.findById(id).populate('user', 'displayName').exec(function(err, article) {
        if (err) return next(err);
        if (!article) return next(new Error('Failed to load article ' + id));
        req.article = article;
        next();
    });
};

和文章路线

    /**
 * Module dependencies.
 */
var users = require('../../app/controllers/users.server.controller'),
    articles = require('../../app/controllers/articles.server.controller');

module.exports = function(app) {
    // Article Routes
    app.route('/articles')
        .get(articles.list)
        .post(users.requiresLogin, articles.create);

    app.route('/articles/:articleId')
        .get(articles.read)
        .put(users.requiresLogin, articles.hasAuthorization, articles.update)
        .delete(users.requiresLogin, articles.hasAuthorization, articles.delete);

    // Finish by binding the article middleware
    app.param('articleId', articles.articleByID);
};

客户端

我们有一个带有路由配置文件的文章模块

// Setting up route
angular.module('articles').config(['$stateProvider',
    function($stateProvider) {
        // Articles state routing
        $stateProvider.
        state('listArticles', {
            url: '/articles',
            templateUrl: 'modules/articles/views/list-articles.client.view.html'
        }).
        state('viewArticle', {
            url: '/articles/:articleId',
            templateUrl: 'modules/articles/views/view-article.client.view.html'
        });
    }
]);

文章管理员

angular.module('articles').controller('ArticlesController', ['$scope', '$stateParams', '$location', 'Authentication', 'Articles',
function($scope, $stateParams, $location, Authentication, Articles) {
    $scope.authentication = Authentication;

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

    $scope.findOne = function() {
        $scope.article = Articles.get({
            articleId: $stateParams.articleId
        });
    };
}
]);

和列表视图

<section data-ng-controller="ArticlesController" data-ng-init="find()">
<div class="page-header">
    <h1>Articles</h1>
</div>
<div class="list-group">
    <a data-ng-repeat="article in articles" data-ng-href="#!/articles/{{article._id}}" class="list-group-item">
        <small class="list-group-item-text">
            Posted on
            <span data-ng-bind="article.created | date:'mediumDate'"></span>
            by
            <span data-ng-bind="article.user.displayName"></span>
        </small>
        <h4 class="list-group-item-heading" data-ng-bind="article.title"></h4>
        <p class="list-group-item-text" data-ng-bind="article.content"></p>
    </a>
</div>
<div class="alert alert-warning text-center" data-ng-if="articles.$resolved && !articles.length">
    No articles yet, why don't you <a href="/#!/articles/create">create one</a>?
</div>

我的问题是:

如果我想查找某个用户的所有文章,如何在 angular 视图中将变量参数传递给 find() 函数?

我认为 angular 控制器中的 Articles.query() 可以作为 mongodb 或猫鼬命令使用,但我无法实现它。

query()方法中传递一个对象,它将作为查询变量发送到服务器。在服务器中使用 req.query 获取这些变量:

客户:

$scope.articles = Articles.query({user: 'user_id'});

服务器:

Article.find({user: req.query.user}).sort('-created').populate('user', 'displayName').