Можно ли передать более одного идентификатора в строку запроса в angular-in-memory-web-api? - PullRequest
0 голосов
/ 18 февраля 2019

Например, я хочу сделать что-то вроде этого:

{hostURL}/api/entities/14/15/16/17

, что в свою очередь вернет все данные для соответствующих идентификаторов.Этот подход не работает.Я также попробовал это, что тоже не сработало:

{hostURL}/api/entities?id=16&id=17

В документах показано, как использовать его с одним идентификатором (при обработке HTTP-запроса): https://github.com/angular/in-memory-web-api

Можно ли передать несколько идентификаторов?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Получил это.Я нашел этот файл GitHub в документах angular-in-memory-web-api: https://github.com/angular/in-memory-web-api/blob/master/src/app/hero-in-mem-data-override.service.ts и создал следующее решение:

import { getStatusText, STATUS } from 'angular-in-memory-web-api/http-status-codes';
import { InMemoryDbService, RequestInfo } from 'angular-in-memory-web-api';

  get(reqInfo: RequestInfo) {
    // Extract ids from URL
    const ids: Array<number> = reqInfo.req.urlWithParams.match(/[0-9]+/g).map(n => +(n));
    // If there's more than one ID in the URL then we call the appropriate function
    if (ids.length > 1) {
      return this.getRelationshipDetails(reqInfo, ids)
    }
  }

private getRelationshipDetails(reqInfo: RequestInfo, ids: Array<number>) {
  console.log('HTTP GET override')
  const entities = reqInfo.collection;
  return reqInfo.utils.createResponse$(() => {
    const data = entities.filter(entity => ids.indexOf(entity.id) !== -1)
    const dataEncapsulation = reqInfo.utils.getConfig().dataEncapsulation;
    const options: any = data ?
      {
        body: dataEncapsulation ? { data } : data,
        status: STATUS.OK
      } :
      {
        body: { error: `Entities with ids='${ids}' not found` },
        status: STATUS.NOT_FOUND
      };
    return this.finishOptions(options, reqInfo)
  });
}

private finishOptions(options: any, { headers, url }: RequestInfo) {
  options.statusText = getStatusText(options.status);
  options.headers = headers;
  options.url = url;
  return options;
}
0 голосов
/ 18 февраля 2019

Попробуйте передать массив в виде идентификаторов

let IDs = [16, 17];

{hostURL}/api/entities?ids={IDs}

Возможно, это сработает для вас.

...