А не поможете разобраться с $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 просмотров
Пригласить эксперта
Ответы на вопрос 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 сервера запрос добирается)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы