Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Aula 5 - problema com o retornor da busca por id

Pessoal, estou tendo um erro ao clicar em editar uma foto.

Error: [$resource:badcfg] http://errors.angularjs.org/1.3.15/$resource/badcfg?p0=get&p1=object&p2=array
    at angular.min.js:6
    at q.then.p.$resolved (angular-resource.min.js:9)
    at angular.min.js:112
    at n.$eval (angular.min.js:126)
    at n.$digest (angular.min.js:123)
    at n.$apply (angular.min.js:126)
    at l (angular.min.js:81)
    at M (angular.min.js:85)
    at XMLHttpRequest.F.onload (angular.min.js:86)

A requisição chega no backend, ele acha a foto. Mas no angular da esse erro a cima. vou passar os códigos aqui para vocês analisarem:

foto - api:

var api = {};

var fotos = [
    {_id: 1, titulo: 'Leão', url:'http://www.fundosanimais.com/Minis/leoes.jpg' },
    {_id: 2, titulo: 'Leão 2', url:'http://www.fundosanimais.com/Minis/leoes.jpg' }
];

api.lista = function(req, res) {

    res.json(fotos);
}

api.buscaPorId = function(req, res){
    var foto = fotos.filter(element => element._id == req.params.id);
    console.log(foto);
    res.json(foto);
}

module.exports = api;

foto - routes:


module.exports = function(app) {

    var api = app.api.foto;
    app.get('/v1/fotos', api.lista);
    app.get('/v1/fotos/:id',api.buscaPorId);

};

no angular:

meus-servicos:

angular.module('meusServicos', ['ngResource'])
    .factory('recursoFoto', function($resource) {
        return $resource('/v1/fotos/:fotoId', null, {
            'update' : {
                method: 'PUT'
            }
        });
    })
    .factory("cadastroDeFotos", function(recursoFoto, $q) {
        var service = {};
        service.cadastrar = function(foto) {
            return $q(function(resolve, reject) {

                if(foto._id) {
                    recursoFoto.update({fotoId: foto._id}, foto, function() {
                        resolve({
                            mensagem: 'Foto ' + foto.titulo + ' atualizada com sucesso',
                            inclusao: false
                        });
                    }, function(erro) {
                        console.log(erro);
                        reject({
                            mensagem: 'Não foi possível atualizar a foto ' + foto.titulo
                        });
                    });

                } else {
                    recursoFoto.save(foto, function() {
                        resolve({
                            mensagem: 'Foto ' + foto.titulo + ' incluída com sucesso',
                            inclusao: true
                        });
                    }, function(erro) {
                        console.log(erro);
                        reject({
                            mensagem: 'Não foi possível incluir a foto ' + foto.titulo
                        });
                    });
                }
            });
        };
        return service;
    });

foto-controller:

angular.module('alurapic')
    .controller('FotoController', function($scope, recursoFoto, $routeParams, cadastroDeFotos) {

        $scope.foto = {};
        $scope.mensagem = '';

        if($routeParams.fotoId) {
            recursoFoto.get({fotoId: $routeParams.fotoId}, function(foto) {
                $scope.foto = foto; 
            }, function(erro) {
                console.log(erro);
                $scope.mensagem = 'Não foi possível obter a foto'
            });
        }

        $scope.submeter = function() {

            if ($scope.formulario.$valid) {
                cadastroDeFotos.cadastrar($scope.foto)
                .then(function(dados) {
                    $scope.mensagem = dados.mensagem;
                    if (dados.inclusao) $scope.foto = {};
                })
                .catch(function(erro) {
                    $scope.mensagem = erro.mensagem;
                });
            }
        };
    });

versão do node: 4.1.2

1 resposta
solução!

Pessoal, achei o erro. No meu caso eu estava usando o filter. Ele acaba retornando um vetor com 1 único elemento. Quando chegava no Angular ele dava erro. ao trocar para o find, ele começou a funcionar!