Фильтр в NodeJs, Angular и Express не фильтрует результаты - PullRequest
0 голосов
/ 28 октября 2019

У меня есть маршрут, который я использую для фильтрации некоторых данных

import {Request, Response} from 'express';
import {MODELS} from "./db-data";
import {setTimeout} from "timers";



export function searchModel(req: Request, res: Response) {

    const queryParams = req.query;

    const modelId = queryParams.modelId,
          filter = queryParams.filter || '',
          sortOrder = queryParams.sortOrder || 'asc',
          pageNumber = parseInt(queryParams.pageNumber) || 0,
          pageSize = parseInt(queryParams.pageSize) || 3;

    let models:any = Object.values(MODELS).sort((l1:any, l2:any) => l1.id - l2.id);

    models = models.filter(model => model.title.trim().toLowerCase().search(filter.toLowerCase()) >= 0);

    if (sortOrder == "desc") {
        models = models.reverse();
    }

    const initialPos = pageNumber * pageSize;

    const modelsPage = models.slice(initialPos, initialPos + pageSize);

    setTimeout(() => {
        res.status(200).json({payload: modelsPage});
    },1000);


}

МОДЕЛИ - это такой объект

export const MODELS: any = {

    0: {
        id: 0,
        title: "test1",
        category: 'category1',
        longDescription: "Lorem ipsum"
    },
    ....
    ....

Затем в моем файле server.ts:

app.route('/api/models').get(searchModel);

На стороне клиента у меня есть компонент, и я использую RxJ для фильтрации результатов следующим образом:

export class RepositoryComponent implements OnInit, AfterViewInit {

  modelList$: Observable<Model[]>;
  @ViewChild('searchInput', { static: true }) input: ElementRef;

  constructor() { }

  ngOnInit() {
    setRxJsLoggingLevel(RxJsLoggingLevel.TRACE);
  }

  ngAfterViewInit() {
    this.modelList$ = fromEvent<any>(this.input.nativeElement, 'keyup')
      .pipe(
          map(event => event.target.value),
          startWith(''),
          debug( RxJsLoggingLevel.TRACE, "search "),
          debounceTime(400),
          distinctUntilChanged(),
          switchMap(search => this.loadModels(search)),
          debug( RxJsLoggingLevel.DEBUG, "lessons value ")
      );
  }

  loadModels(search = ''): Observable<Model[]> {
    return createHttpObservable(`/api/models?pageSize=100&filter=${search}`)
    .pipe(
        map(res => res["payload"])
    );
  }

}

Наблюдатель работает правильно и возвращает все модели правильно. Но если я попытаюсь отфильтровать запрос, набрав «test1»:

http://localhost:4200/api/models?pageSize=100&filter=test1

Это не работает и всегда возвращает все модели. Я не могу понять это

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