Ao finalizar a leitura/implementação do código do capitulo 5.11, fui realizar o teste da página “http://localhost:3000/#/contato/1” e recebo o erro “Error in resource configuration for action get
. Expected response to contain an object but got an array” no console.
Segue link do repositório: https://github.com/darwinboaventura/contatooh
Vou explicar o erro para você ficar mestre no assunto.
Você em Angular usar Contato.get para obter um recurso do servidor. Certo? Por padrão, o get só pode receber um objeto e nunca um array. Então, o resource esta reclamando que você recebeu um array, aliás, a mensagem é bem clara quanto a isso.
Agora, no lado do servidor, em seu controller do Node.js há o seguinte código:
controller.obtemContato = function(req, res) {
var idContato = req.params.id;
var contato = contatos.filter(function(contato) {
return contato._id == idContato;
});
console.log(contato);
contato ? res.json(contato) : res.status(404).send('Contato não encontrado');
};
O problema esta i. Como usamos filter, filter cria um novo array (veja, não é um object). Mas como nosso filtro sempre retornará um objecto, precisamos pegar o da primeira posição faltou o [0].
controller.obtemContato = function(req, res) {
var idContato = req.params.id;
var contato = contatos.filter(function(contato) {
return contato._id == idContato;
})[0]; // <-- faltou aqui!
console.log(contato);
contato ? res.json(contato) : res.status(404).send('Contato não encontrado');
};
Eu preferi usar filter para buscar o elemento do que fazer um for que é meio procedural o negócio.
Sucesso e bom estudo!
Muito obrigado pela rápida resposta. O problema foi solucionado