Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Não poderia devolver a nova lista de fotos ao invés do status 204?

Por que quando a API revomePorId tenta retorna a lista filtrada ocorre o seguinte erro:

Error: [$resource:badcfg] http://errors.angularjs.org/1.3.15/$resource/badcfg?p0=delete&p1=object&p2=array
   R/<@http://localhost:3000/js/lib/angular.min.js:6:417
   v/</e[k]/n<@http://localhost:3000/js/lib/angular-resource.min.js:9:330
   f/<@http://localhost:3000/js/lib/angular.min.js:112:113
   $eval@http://localhost:3000/js/lib/angular.min.js:126:15
   $digest@http://localhost:3000/js/lib/angular.min.js:123:106
   $apply@http://localhost:3000/js/lib/angular.min.js:126:293
   l@http://localhost:3000/js/lib/angular.min.js:81:240
   M@http://localhost:3000/js/lib/angular.min.js:85:342
   wf/</F.onload@http://localhost:3000/js/lib/angular.min.js:86:367
      Angular 9
        e
        get
        f
        $eval
        $digest
        $apply
        l
        M
        onload

api/fotos.js:

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' }
];

var api = {};

api.lista = function(req, res) {

    res.json(fotos);
};

api.buscaPorId = function(req, res) {
    var foto = fotos.find(function(foto){
        return foto._id == req.params.id;
    });
    res.json(foto);
};

api.removePorId = function(req, res) {
    fotos = fotos.filter(function(foto) {
        return foto._id != req.params.id;
    });
    res.json(fotos);
};


module.exports = api;

Obs: apenas toquei res.sendStatus(204) por res.json(fotos).

4 respostas

Também reparei que o console começou a mostrar os warnings abaixo:

Source map error: request failed with status 404
Resource URL: http://localhost:3000/js/lib/angular.min.js
Source Map URL: angular.min.js.map

Source map error: request failed with status 404
Resource URL: http://localhost:3000/js/lib/angular-animate.min.js
Source Map URL: angular-animate.min.js.map

Source map error: request failed with status 404
Resource URL: http://localhost:3000/js/lib/angular-route.min.js
Source Map URL: angular-route.min.js.map

Source map error: request failed with status 404
Resource URL: http://localhost:3000/js/lib/angular-resource.min.js
Source Map URL: angular-resource.min.js.map

Esses warnings estão aparecendo no console independente de eu usar res.sendStatus(204) ou res.json(fotos), e até ontem, quando terminei o capítulo 5 do curso, eles não apareciam.

Fala aí Joaquim, tudo bem? Vamos por partes:

Sobre os warnings é porque não foi encontrado os arquivos .map (sem problemas), nada muito importante.

Os arquivos .map são usado para que você consiga debugar e ler o código depois de ter sido minificado e tals.

Sobre o erro, consegue mandar o código do Angular onde você está fazendo a requisição?

Fico no aguardo.

O código do Angular é do próprio projeto Alurapic, caso deseje baixar, o ideal é pegar o do próximo capítulo, que já estará com a api.removePorId implementada!

Quando troquei, no código correto, o retorno da api.removePorId de res.sendStatus(204) para res.json(fotos), na tentativa de retornar a lista de fotos, é que o erro ocorreu.

Não entendi porque o erro ocorreu, se na api.lista, que foi implementada em um capítulo anterior, o retorno é a própria lista de fotos através do res.json(fotos);

solução!

Fala ai Joaquim, o problema está por causa da resposta ser um array, veja o erro que está dando:

error/$resource/badcfg?p0=delete&p1=object&p2=array

Isso acontece quando o serviço espera que a resposta possa ser desserializada como um array mas recebeu um object ou para um object mas recebeu um array.

Por padrão todas as ações dos recursos esperam receber um objeto.

Para resolver o problema, o que você pode fazer é retornar um objeto:

res.json({ fotos });

Isso deve resolver seu problema, a API irá retornar um objeto com a chave fotos e o valor será o array novo de fotos filtrado.

Espero ter ajudado.