Angular 7 api не вызывается

Я пытаюсь вызвать API, но думаю, что что-то не так,

import { map } from "rxjs/operators";
import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";

export class Message {
    constructor(public text: any, public sentBy: any) { }
}

@Injectable()
export class ChatService {
    constructor(public http: HttpClient) {
    }

    public sendMessage(message) {
        const usertext = new Message(message, 'user');
        console.info("message send",usertext);
       return this.http
            .post<any>(`http://locahost:3000/api/text_query`, usertext)
            .pipe(
                map(response => {
                    return response;
                })
            );
    }

}

Не получается никаких логов в Network tab хрома. Я использую angular 7.0.1 и машинопись: 3.1.3 Вот мой файл компонента приложения

import {Component, OnInit} from '@angular/core';
import {ChatService} fom './chat.service';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {
  message: string;
  constructor(private chatService: ChatService) {}

  sendMessage() {
    this.chatService.sendMessage(this.message).subscribe(res=>{
    })
  }
  ngOnInit() {
  }
}

сервис правильно добавлен в файл app.module.ts

Вы подписываетесь на sendMessage где-нибудь в приложении?

nircraft 17.12.2018 18:37

нет, я звоню из компонента приложения, и сюда поступают данные, все, что я хочу отправить

Nikhil Savaliya 17.12.2018 18:39

Итак, вставьте свою службу в AppComponent и подпишитесь на sendMessage службы в классе appComponent.

nircraft 17.12.2018 18:41

Включите код из вашего AppComponent, показывающий, как вы внедрили ChatService в компонент и как вы вызвали метод sendMessage.

Roddy of the Frozen Peas 17.12.2018 18:41

отредактировал вопрос

Nikhil Savaliya 17.12.2018 18:48
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
3
5
1 304
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы должны подписаться на наблюдаемое с помощью .subscribe ()

Кстати: почему вы сопоставили одно и то же значение?

       map(response => {
            return response;
        })
Ответ принят как подходящий

Убедитесь, что вы внедрили эту службу ChatService в свой компонент.

ChatService должен быть зарегистрирован как поставщики модуля приложения или того места, где он используется, а затем вы должны подписаться на sendMessage в компоненте, в который внедряется услуга.

Убедитесь, что ваш сервис зарегистрирован в списке поставщиков на app.module или имеет декларацию Injectable вверху:

@Injectable({
  providedIn: 'root',
})

Типичный пример службы в angular 7 ниже:

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root',
})

export class ChatService{

  constructor() { }

}

Методы, предоставляемые HttpClient, обычно возвращают Cold Observable. По сути, это означало бы, что эти методы не будут выполнять никаких вызовов API, если возвращаемые ими Observables не являются subscribed.

Чтобы исправить вашу проблему:

import { map } from "rxjs/operators";
import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";

export interface Message {
  public text: any;
  public sentBy: any;
}

@Injectable()
export class ChatService {
  constructor(public http: HttpClient) {}

  public sendMessage(message) {
    const usertext: Message = { text: message, sentBy: 'user' };
    return this.http
      .post<any>(`http://locahost:3000/api/text_query`, usertext);
  }

}

И в вашем компоненте:

...
import { ChatService } from "path-to-chat-service";

@Component({...})
export class ChatComponent {
  constructor(private chatService: ChatService) {}

  sendMessage(message) {
    this.chatService.sendMessage(message)
      .subscribe(res => console.info(res));
  }

  ...

}

Полезные ресурсы:

  1. Горячие и холодные наблюдаемые - Бен Леш (руководитель RXJS).
  2. ХОЛОД VS ГОРЯЧИЕ НАБЛЮДАЕМЫЕ - Хотя трамвай.

Другие вопросы по теме