【问题标题】:AngularJS to Mongoose params on queriesAngularJS 到 Mongoose 查询参数
【发布时间】:2015-11-24 08:43:02
【问题描述】:

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

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

我的问题是:

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

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

【问题讨论】:

    标签: angularjs node.js mongodb mongoose meanjs


    【解决方案1】:

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

    客户:

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

    服务器:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-30
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 2021-01-16
      • 1970-01-01
      相关资源
      最近更新 更多