Как использовать FeathersJS REST в Angular - PullRequest
0 голосов
/ 08 ноября 2019

Я изо всех сил пытаюсь заставить Feathers in Angular работать против REST-сервера Feathers. Похоже, что он не отправляет запрос.

У меня есть сервер Feathers с ресурсом http://example.com/app/experiences, который возвращает данные в формате с разбивкой на перья:

{
    "total": 1,
    "limit": 10,
    "skip": 0,
    "data": [
        {
            "_id": "5db5ef8dc64f59001d750c72",
            ... etc ..,
        }
    ]

На клиенте яу меня есть служба Feathers, которая централизует конфигурацию всех служб:

@Injectable()
export class Feathers {
  private _feathers = feathers();                     
  private feathersRestClient = feathersRestClient('http://example.com/app');

  constructor() {
    this._feathers
      .configure(this.feathersRestClient.angular)
      .configure(rx({                          
        idField: '_id'
      }));

    this._feathers.use('/experiences', new FeathersGenericService());
  }

  // expose services
  public service(name: string) {
    return this._feathers.service(name);
  }
}

FeathersGenericService - это просто обобщенный класс, полученный из https://docs.feathersjs.com/guides/basics/services.html#service-methods:

export class FeathersGenericService implements ServiceMethods<any>  {
  async find(params: Params) {}
  async get(id: Id, params: Params) {}
  async create(data: any, params: Params) {}
  async update(id: NullableId, data: any, params: Params) {}
  async patch(id: NullableId, data: any, params: Params) {}
  async remove(id: NullableId, params: Params) {}
}

Тогда у меня есть простой ExperienceService, который просто находитпервые 25 результатов:

export class ExperienceService {

  constructor(private feathers: Feathers) { }


  experiences$() {
    return from((this.feathers
      .service('experiences'))
      .watch()
      .find({
        query: {
          $limit: 25
        }
      }));
  }        

}

И, наконец, компонент:

export class ExperienceListComponent implements OnInit {
  experiences$: Observable<any[]>;

  constructor(private eservice: ExperienceService) {}

  ngOnInit() {
    this.eservice.experiences$().subscribe(res => {
      console.log(res);
      return res;
    });
  }
}

Как бы то ни было, "res" не определено ... На вкладке сети я не вижу запроса к APIбыло сделано.

Что я делаю не так?

РЕДАКТИРОВАТЬ : я создал этот Stackblitz: https://stackblitz.com/edit/angular-qfysld

Есть ошибка со Stackblitz и Feathers,поэтому он не компилируется, но компилируется в локальный файл после загрузки.

1 Ответ

1 голос
/ 10 ноября 2019
import { from } from 'rxjs';
...
return from(this.feathers
      .service('/experiences')
      .find({
        query: {
          $limit: 25
        }
      }));

Метод поиска Перьев возвращает Обещание. Вам нужно преобразовать его в Observable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...