2014-12-13 6 views
0

Я новичок в meanjs и во всем этом джазе, так голый со мной. В настоящее время я разрабатываю приложение опросов, в котором пользователь может голосовать за вариант в данном опросе. каждый опрос имеет 2 или более вариантов в качестве поддокумента. каждый из этих вариантов имеет голоса, которые являются документами в другой коллекции (для аутентификации и уникальных целей голосования).Как создать новый документ и обновить существующий документ - MEAN.js

прямо сейчас у меня есть опросы CRUD working (я могу создавать, читать, обновлять и удалять без проблем), но моя проблема начинается, когда я пытаюсь создать функцию голосования, то есть обновлять документы опроса poll_option subdocument + создание новый документ для голосования.

poll.server.model.js

'use strict'; 

/** 
* Module dependencies. 
*/ 
var mongoose = require('mongoose'), 
    Schema = mongoose.Schema; 

/** 
* Poll Schema 
*/ 
var PollSchema = new Schema({ 
    poll_id: {type:Number}, 
    user: { 
     type: Schema.ObjectId, 
     ref: 'User' 
    }, 
    poll_question: {type:String}, 
    poll_language: [{ 
     type:Schema.ObjectId, 
     ref: 'Language' 
    }], 
    poll_category: [{ 
     type: Schema.ObjectId, 
     ref: 'Category' 
    }], 
    poll_description: {type:String}, 
    poll_description_raw: {type:String}, 
    poll_weight_additional: {type:Number}, 
    poll_flag_active:{type:Number,default:1}, 
    poll_flag_18plus:{type:Number,default:0}, 
    poll_flag_expire:{type:Number,default:0}, 
    poll_flag_deleted:{type:Number,default:0}, 
    poll_flag_moderated:{type:Number,default:0}, 
    poll_flag_favourised:{type:Number,default:0}, 
    poll_date_expiration:{type:Date}, 
    poll_date_inserted:{type:Date,default:Date.now}, 
    poll_flag_updated:{type:Date}, 
    show_thumbs:{type:Boolean}, 
    comments: [{ 
     type: Schema.ObjectId, 
     ref: 'Comment' 
    }], 
    poll_options: [{ 
     option_text:{type:String}, 
     option_thumb:{type:Number,default:0}, 
     votes:[{ 
      type: Schema.ObjectId, 
      ref: 'Vote' 
     }] 
    }] 
}); 

mongoose.model('Poll', PollSchema); 

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

// Vote 
      $scope.vote = function(){ 

       $scope.votes = Votes.query(); 

       var vote = new Votes({ 
        _id:pollId, 
        option_id:optionId 
       }); 

       vote.$save(function(response){ 
        // ... // 
       }, function(errorResponse) { 
        $scope.error = errorResponse.data.message; 
       }); 
      }; 

здесь является Votes фабрика:

angular.module('polls').factory('Votes', [ '$resource', 
    function($resource) { 
     return $resource('polls/:pollId/votes/:optionId', { 
      pollId: '@_id', 
      optionId: '@option_id' 
     }, { 
      update: { 
       method: 'PUT' 
      } 
     }); 
    } 
]); 

до этого момента все работает хорошо, т.е. когда я запускаю $ scope.vote(); Функция я получить этот ответ в консоли браузера:

POST http://localhost:3000/polls/548c6da001ec1f4ba2860c38/votes/548c6da001ec1f4ba2860c3a 404 (Not Found) 

из этого я заключаю, что призыв к этому URL сделан, контроллер + обслуживание (угловой) работает.

после meanjs примера статьи, я понимаю, что мне нужно, чтобы отобразить optionId параметров к фактической опции

poll.server.route.js

'use strict'; 

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

module.exports = function(app) { 
    // Poll Routes 
    app.route('/polls') 
     .get(polls.list) 
     .post(polls.create); 

    app.route('/polls/:pollId') 
     .get(polls.read) 
     .put(polls.update) 
     .delete(polls.delete); 

    app.route('/polls/:pollId/votes/:optionId') 
     .put(polls.vote); 

    app.param('pollId', polls.pollByID); 
    app.param('optionId', polls.pollOptionByID); 

}; 

, но независимо от того, что я делаю, продолжайте получать 404! здесь функция polls.pollOptionByID в polls.server.controller.js

exports.pollOptionByID = function(req, res, next, id) { 
    Poll.findOne({'poll_options._id':id}).exec(function(err,poll_option){ 
     console.log('hi'); 
     if (err) return next(err); 
     if (!poll) return next(new Error('Failed to load poll option ' + id)); 
     req.poll_option = poll_option; 
     next(); 
    }); 
} 

, но я даже не попасть туда, я не вижу, что привет в журнале консоли. и да, в минусе я пробовал без console.log, но ничего не работает, я продолжаю получать только 404. Что я делаю неправильно? как я могу достичь своих целей, создавая новый документ для голосования + сопоставляя его с субдокументом poll_option в данном документе опроса? пожалуйста помоги!

ответ

1

так как веллингтон Zhao (https://www.facebook.com/AlphanumericSoup?fref=ufi) в meanjs фб группы (https://www.facebook.com/groups/meanjs/463004417186215/?comment_id=463027443850579&notif_t=group_comment) отметил:

Похоже, вы пытаетесь POST к маршруту (/ опросы /: pollId/голосов /: optionsId), который имеет только PUT. Измените его тому или другому и посмотрите, сохраняется ли 404.

, поэтому я изменил определение маршрута на должность и альта, это сработало! надеялся, что я помогу другим нообам избежать частых проклятий и кричать, почему.

Смежные вопросы