Задать вопрос

А не поможете разобраться с $resource и серверным ответом?

Делаю комментарии к статьям (Две связанные схемы DiscussSchema и CommentSchema).
Сделал сервис
angular.module('discusses').factory('Comments', ['$resource',
	function($resource) {
		return $resource('api/discusses/comments', 
		{
			update: {
				method: 'POST'
			}
		});
	}
]);
,

В контроллере angular
var CommentResource = Comments;
$scope.addComment = function(){
    var commentRes = new CommentResource();
    console.log(commentRes);
    commentRes.discuss_id = $stateParams.discussId;
    commentRes.body = $scope.commentData.body;
    commentRes.user = user;

    commentRes.$save(function(result){
      
    });
};

В консоль выводится всё нормально. id, user как object, всё хорошо.

В серверных раутах пишу
module.exports = function (app) {
    var disсusses = require('../controllers/disсusses.server.controller');
    var disсussesPolicy = require('../policies/disсusses.server.policy');
app.route('/api/disсusses/comments').all(disсussesPolicy.isAllowed)
            .post(disсusses.addcomments)
            .get(disсusses.listall);

в серверном контроллере пишу
exports.addcomments = function(req,res, next){
    console.log('server addcomments');
  };
exports.listall = function(req,res,next){
    console.log('sever lisall');
};

Но при нажатии addComment() получаю
GET http://localhost:3000/server-error 500 (Internal Server Error)

Т.е. что-то ни туда посылается. И вопрос - а почему GET? $save вроде идет как POST
Что происходит и кто виноват?
  • Вопрос задан
  • 275 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
скорее всего сервер редеректнул вас на server-error, и запрос по редиректу шел уже по GET
Ответ написан
mr_T
@mr_T
Web-разработчик
Если имел место редирект (а он тут почти наверняка был), то можно посмотреть в панели разработчика все запросы, которые отправлял браузер, в частности запрос, который получил в ответ команду на редирект.
А так - 500 ошибка где-то в приложении отправляется вручную скорее всего, так что нужно сначала выяснить, где конкретно. Скорее всего какой-то middleware типа bodyparser'а не сумел обработать запрос. А вообще странно, что был именно редирект на /server-error. По-хорошему ошибку нужно выдавать не на редиректе, а непосредственно на странице, на которой она произошла. Ну и еще в консоль приложения загляни, там может тоже что-то полезное есть.
Ответ написан
Комментировать
TsarS
@TsarS Автор вопроса
Тогда следующий вопрос. Теперь делаю комментарии embedded.
Angular :
angular.module('discusses').factory('Discusses', ['$resource',
	function($resource) {
		return $resource('api/discusses/:discussId', { discussId: '@_id'
		}, {
			update: {
				method: 'PUT'
			}
		},
		   {
		   	addcomment: {
		   		method: 'PUT'
		   	}
    };

В контроллере
$scope.addComment = function() {
			var discuss = new Discusses();
			var content = $scope.content;

			discuss.addcomment(function() {
				discuss.comments.push(content);
				$location.path('discusses/' + discuss._id);
		
			}, function(errorResponse) {
				$scope.error = errorResponse.data.message;
			});
		};

В случае
discuss.addcomment, в том числе и с $
выдает
TypeError: undefined is not a function
    at Scope.$scope.addComment

Если меняю на $update, то всё работает (ну на самом деле хрень получается, но до api сервера запрос добирается)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы