Fórum Error Angular + Django Rest Api #603526
08/07/2019
0
boa tarde,
Estou precisando de uma ajuda, estou desenvolvendo uma agenda de contatos básica, porém esta dando alguns erros ao listar os contatos. No postman eu consigo fazer o CRUD com a api.
No server eu recebo a mensagem:
-- [08/Jul/2019 18:25:35] "GET /api/contato/ HTTP/1.1" 200 230
-- Erros do console do Google Chrome:
=================
contato.service.ts
===========================
lista-contato.component.ts
Estou precisando de uma ajuda, estou desenvolvendo uma agenda de contatos básica, porém esta dando alguns erros ao listar os contatos. No postman eu consigo fazer o CRUD com a api.
No server eu recebo a mensagem:
-- [08/Jul/2019 18:25:35] "GET /api/contato/ HTTP/1.1" 200 230
-- Erros do console do Google Chrome:
ListaContatoComponent.html:8 ERROR TypeError: Cannot read property ''''id'''' of undefined
at Object.eval [as updateDirectives] (ListaContatoComponent.html:12)
at Object.debugUpdateDirectives [as updateDirectives] (core.js:39358)
at checkAndUpdateView (core.js:38370)
at callViewAction (core.js:38736)
at execComponentViewsAction (core.js:38664)
at checkAndUpdateView (core.js:38377)
at callViewAction (core.js:38736)
at execEmbeddedViewsAction (core.js:38693)
at checkAndUpdateView (core.js:38371)
at callViewAction (core.js:38736)ERROR CONTEXT DebugContext_ {view: {…}, nodeIndex: 9, nodeDef: {…}, elDef: {…}, elView: {…}}Access to XMLHttpRequest at ''''http://127.0.0.1:8000/api/contato/'''' from origin ''''http://127.0.0.1:4200'''' has been blocked by CORS policy: No ''''Access-Control-Allow-Origin'''' header is present on the requested resource.
=================
contato.service.ts
import { Injectable } from ''''@angular/core'''';
import { environment } from ''''../../environments/environment'''';
import { HttpClient } from ''''@angular/common/http'''';
import { Contato } from ''''../interfaces/contato'''';
import { Observable } from ''''rxjs'''';
@Injectable({
providedIn: ''''root''''
})
export class ContatoService {
constructor(private http: HttpClient) { }
getListaContatos(): Observable <Contato[]> {
const url = `${environment.contatoApiUrl}/contato/`;
return this.http.get<Contato[]>(url);
}
getContato(id: number): Observable <Contato[]> {
const url = `${environment.contatoApiUrl}/contato/$`;
return this.http.get<Contato[]>(url);
}
addContato(contato: Contato): Observable <Contato[]> {
const url = `${environment.contatoApiUrl}/contato/`;
return this.http.post<Contato[]>(url, contato);
}
atualizaContato(contato: Contato): Observable <Contato[]> {
const url = `${environment.contatoApiUrl}/contato/${contato.id}`;
return this.http.put<Contato[]>(url, contato);
}
deletaContato(id: number): Observable <Contato[]> {
const url = `${environment.contatoApiUrl}/contato/$`;
return this.http.delete<Contato[]>(url);
}
}
===========================
lista-contato.component.ts
import { Component, OnInit, ViewChild } from ''''@angular/core'''';
import { Contato } from ''''../../interfaces/contato'''';
import { ContatoService } from ''''../../services/contato.service'''';
import { ErrorMsgComponent } from ''''../../compartilhado/error-msg/error-msg.component'''';
@Component({
selector: ''''app-lista-contato'''',
templateUrl: ''''./lista-contato.component.html'''',
styleUrls: [''''./lista-contato.component.css'''']
})
export class ListaContatoComponent implements OnInit {
public contatos: Contato[];
@ViewChild(ErrorMsgComponent, {static: false}) errorMsgComponent: ErrorMsgComponent;
constructor(private contatoService: ContatoService) { }
ngOnInit() {
this.getListaContatos();
}
getListaContatos() {
this.contatoService.getListaContatos()
.subscribe((contatos: Contato[]) => {
this.contatos = contatos;
}, () => { this.errorMsgComponent.setError(''''Falha ao buscar contatos.'''' ); });
}
deletaContato(id: number) {
this.contatoService.deletaContato(id)
.subscribe(() => {
this.getListaContatos();
}, () => { this.errorMsgComponent.setError(''''Falha ao deletar contatos.''''); });
}
existemContatos(): boolean {
return this.contatos && this.contatos.length > 0;
}
}
Fernando
Curtir tópico
+ 0
Responder
Posts
09/07/2019
Fernando
Consegui a resposta no Stackoverflow, vou postar aqui caso alguém precise.
Quanto ao erro de property id era porque a propriedade estava fora do *ngFor no arquivo html.
Sobre o erro 203:
No django:
- Instale o cors com o comando
No arquivo settings.py, adiciona no INSTALLED_APPS:
No MIDDLEWARE:
Acrescente ainda no arquivo settings.py
Quanto ao erro de property id era porque a propriedade estava fora do *ngFor no arquivo html.
Sobre o erro 203:
No django:
- Instale o cors com o comando
pip install django-cors-headers
No arquivo settings.py, adiciona no INSTALLED_APPS:
INSTALLED_APPS = [
# I assume there are some other apps here...
'corsheaders',
]No MIDDLEWARE:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
# others middlewares bellow
] Acrescente ainda no arquivo settings.py
ORS_ORIGIN_WHITELIST = [
"http://127.0.0.1:4200" ]
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)