无法在Angular控制器中返回id特定的mongo文档

时间:2015-05-20 18:37:40

标签: javascript angularjs mongodb mongoose mean-stack

尝试返回特定于角度控制器中sectionId的文章列表。我可以使用articles.query返回整个文章列表,但传递的sectionId查询参数将被完全忽略。我尝试将其抽象为文章服务,但我不确定如何正确构建服务,因此它会引发更多错误。任何有关我如何实现这一点的帮助/示例,最好是作为服务,都会很棒。我正在使用mean.js.提前谢谢!

章节控制器

angular.module('sections').controller('SectionsController', ['$scope', '$stateParams', '$location', 'Authentication', 'Sections', 'SectionArticlesList', 'Articles',
function($scope, $stateParams, $location, Authentication, Sections, SectionArticlesList, Articles) {
..........
        // Find existing Section
    $scope.findOne = function() {

        $scope.section = Sections.get({ 
            sectionId: $stateParams.sectionId // sections return fine
        });
        // problem starts here 
        $scope.articles = Articles.query({
            section:$stateParams.sectionId // this param is ignored
        });
        $scope.articles.$promise.then(function(data) {
           // all articles in collection returned instead of section specific
            console.log('Articles: '+ JSON.stringify(data));
            $scope.articles = data;
        });

文章模型

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
},
section: { 
    type: Schema.ObjectId, 
    ref: 'Section' 
},
user: {
    type: Schema.ObjectId,
    ref: 'User'
}
});

更新:

根据Kevin B和Brad Barber的建议,我尝试添加工厂和节点服务器路由,将$ stateParams.sectionId传递给特定的工厂实例。我在articles.routes.server中创建了一个新路由,以确保不与标准'/ articles /:articleId'路由冲突。不幸的是,我尝试的任何东西仍然会抛出错误或文章集合中的所有内容,这与我想要做的事情相反。

section.client.controller

//查找现有的部分 $ scope.findOne = function(){

        $scope.section = Sections.get({ 
            sectionId: $stateParams.sectionId
        });

        // fails no matter what is passed to query
        $scope.articles = SectionArticlesList.query($stateParams.sectionId);
        //$scope.SectionArticlesList.query($stateParams.sectionId);
        //$scope.articles = SectionArticlesList.query({sectionId});

        $scope.articles.$promise.then(function(data) {
            // still only ever returns full list of articles
            console.log('Length of articles: '+ JSON.stringify(data.length));
            $scope.articles = data;
        });

...

articles.client.services

angular.module('articles').factory('SectionArticlesList', ['$resource',
function($resource) {
    return $resource('articles/:articleSectionId', {
        articleSectionId: '@_id'
    }, {
        update: {
            method: 'PUT'
        }
    });
}
]);

articles.server.routes

// Custom route
app.route('/articles/:articleSectionId')
    .get(articles.listBySectionID);
// Custom binding
app.param('articleSectionId', articles.listBySectionID);

articles.server.controller

服务器端控制器功能似乎永远不会被调用,因为两个console.log都没有出现。

exports.listBySectionID = function(req, res, id) {
console.log('listBySection Called....'); // this is never printed
// have tried passing - id, sectionId and {section:id}
Article.find( {section:id} ).sort('-created').populate('user', 'displayName').exec(function(err, articles) {
    if (err) {
        console.log('listBySection err triggered...'); // this neither
        return res.status(400).send({
            message: errorHandler.getErrorMessage(err)
        });
    } else {
        res.json(articles);
    }
});
};

我想我已经尝试了一切我能想到的正确传递sectionId但是还没有任何工作。控制台中的最新错误是下面的404.有趣的是,部分正在通过,但好像它正在寻找一个单一的资源,如一篇博文。

GET /sectionArticles?sectionId=555bfaf29a005c30cbfe6931 404 

我不太明白默认的mean.js /articles路由及其相应的列表功能是如何工作的,但是复制了一个类似的结构并将id作为参数传递给查询来检索只有特定的结果不是。

真的想了解这应该如何连线。如果有人能指出我做错了什么我会很感激!

0 个答案:

没有答案