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

erro ao adicionar comentário

Failed to load resource: 3000/photos/undefined/comments:1 the server responded with a status of 500 (Internal Server Error) Estou recebendo esse erro ao clicar no botão para adicionar um comentário. o botao está com o event binding de submit para chamar o método save()

save() {
        const comment = this.commentForm.get('comment').value as string;
        this.photoService
            .addComment(this.photoId, comment) 
            .subscribe( () => {
                this.commentForm.reset();
                alert('comentario adicionado');
            });   
    }
<div class="mt-4">
        <form [formGroup]="commentForm" (submit)="save()">
          <div class="input-group">
            <textarea formControlName="comment" class="form-control"></textarea>
            <div class="input-group-append">
              <button [disabled]="commentForm.invalid" class="btn btn-primary pull-left">Publish</button>
            </div>
          </div>
          <ap-vmessage
            *ngIf="commentForm.get('comment').errors?.maxlength"
            text="Length must be only up to 300">
          </ap-vmessage>
        </form>
      </div>
    </div>
<div>
addComment (photoId: number, commentText: string) {
        return this.http.post(API + '/photos/' + photoId + '/comments', { commentText: commentText });
    }
2 respostas

Boa tarde, Lucas! Como vai?

Veja que a sua URL tem um undefined no meio dela referente ao id da foto. Isso significa que o this.photoId em .addComment(this.photoId, comment) está indefinido. Dê uma verificada nessa questão e veja se as coisas funcionam da forma como vc esperava.

Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

solução!

O erro estava aqui na hora de passar o photoId, ao invés de criar a variável const photoId, tinha que receber com this.photoId

@Component({
    templateUrl: './photo-details.component.html',
    styleUrls: ['./photo-details.component.css']
})
export class PhotoDetailsComponent implements OnInit {

    photo$: Observable<Photo>;
    photoId: number;

    constructor(
        private route: ActivatedRoute,
        private photoService: PhotoService) {

    }

    ngOnInit() :void {
       /* erro estava aqui -> */ this.photoId = this.route.snapshot.params.photoId; // pega o id da foto que está listado na url
        this.photo$ = this.photoService.findById(this.photoId) // coloca o resultado em um observable
    }


}