AngularJS в Mongoose params по запросам

0

Я использую средний стек, и я не могу понять, как передать параметры в запрос мангуста от углового контроллера.

Из примера среднего стека (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);

контроллер товара с функцией для получения списка всех статей и другой функции для получения статьи по идентификатору

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

Мой вопрос:

Если я хочу найти всю статью пользователя, как передать переменную param функции find() в угловом режиме?

Я думал, что статья.query Articles.query() в угловом контроллере работает как команда mongodb или mongoose, но я не смог ее реализовать.

Теги:
mongoose
meanjs

1 ответ

1
Лучший ответ

Передайте объект в метод query() и он будет отправлен на сервер в качестве переменных запроса. В сервере используйте req.query для получения этих переменных:

Клиент:

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

Сервер:

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню