# Livro MEAN - Expected response to contain an object but got an array

**URL:** <https://forum.casadocodigo.com.br/t/livro-mean-expected-response-to-contain-an-object-but-got-an-array/421>\
**Category:** Livros\
**Tags:** mean\
**Created:** [Janeiro 18, 2017, 2:24pm UTC](https://forum.casadocodigo.com.br/t/livro-mean-expected-response-to-contain-an-object-but-got-an-array/421 "2017-01-18T14:24:50Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![darwinboaventura](https://yyz1.discourse-cdn.com/flex029/user_avatar/forum.casadocodigo.com.br/darwinboaventura/32/14334_2.png) [@darwinboaventura](https://forum.casadocodigo.com.br/u/darwinboaventura)\
**Post date:** [Janeiro 18, 2017, 2:24pm UTC](https://forum.casadocodigo.com.br/t/livro-mean-expected-response-to-contain-an-object-but-got-an-array/421/1 "2017-01-18T14:24:50Z")

</div>

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](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](https://github.com/darwinboaventura/contatooh)

---

<div class="post-metadata">

**Author:** ![flavioalmeida](https://yyz1.discourse-cdn.com/flex029/user_avatar/forum.casadocodigo.com.br/flavioalmeida/32/13701_2.png) [@flavioalmeida](https://forum.casadocodigo.com.br/u/flavioalmeida)\
**Post date:** [Janeiro 18, 2017, 3:05pm UTC](https://forum.casadocodigo.com.br/t/livro-mean-expected-response-to-contain-an-object-but-got-an-array/421/2 "2017-01-18T15:05:14Z")

</div>

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:

```auto

 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].

```auto

 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!

---

<div class="post-metadata">

**Author:** ![darwinboaventura](https://yyz1.discourse-cdn.com/flex029/user_avatar/forum.casadocodigo.com.br/darwinboaventura/32/14334_2.png) [@darwinboaventura](https://forum.casadocodigo.com.br/u/darwinboaventura)\
**Post date:** [Janeiro 18, 2017, 3:15pm UTC](https://forum.casadocodigo.com.br/t/livro-mean-expected-response-to-contain-an-object-but-got-an-array/421/3 "2017-01-18T15:15:03Z")

</div>

Muito obrigado pela rápida resposta. O problema foi solucionado 😁
