代码之家  ›  专栏  ›  技术社区  ›  Alessandro A.

查询时AngularJS到Mongoose参数

  •  0
  • Alessandro A.  · 技术社区  · 10 年前

    我使用的是均值堆栈,无法确定如何从角度控制器向mongose查询传递参数。

    从平均堆栈( 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);
    };
    

    在客户端

    我们有一个带有routes配置文件的articles模块

    // 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>
    

    我的问题是:

    如果我想查找用户的所有文章,如何将变量param传递给 find() 角度视图中的功能?

    我以为 Articles.query() 在角度控制器中作为mongodb或mongose命令工作,但我无法实现它。

    1 回复  |  直到 6 年前
        1
  •  1
  •   hassansin    10 年前

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

    客户:

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

    服务器:

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