InMemoryWebApi анализирует OData URL с ключом - PullRequest
0 голосов
/ 26 марта 2020

Для жизни я не могу заставить InMemoryWebApiModule работать на меня с довольно простым настраиваемым парсером URL (специально для OData).

Это конфигурация моего модуля:

InMemoryWebApiModule.forRoot(MockApiService, { apiBase: 'api/', delay: 0, passThruUnknownUrl: true }),

Это мой сервис:

import { InMemoryDbService, RequestInfoUtilities, ParsedRequestUrl } from 'angular-in-memory-web-api';
import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class MockApiService implements InMemoryDbService {
  constructor() {
  }

  public createDb() {
    const stuff = [
      { id: 1, name: 'Windstorm' },
      { id: 2, name: 'Bombasto' },
      { id: 3, name: 'Magneta' },
      { id: 4, name: 'Tornado' }
    ];
    return { stuff };
  }

  public parseRequestUrl(url: string, requestInfoUtils: RequestInfoUtilities): ParsedRequestUrl {
    const isId = /^([^?]+?)\(([^?]*?)\)/.exec(url);
    if (!!isId) {
      const path = isId[1];
      const parts = path.split('/').filter(_ => !!_);
      const set = parts[parts.length - 1];
      const key = isId[2];
      console.log('Found with key');
      return requestInfoUtils.parseRequestUrl(`/api/${set}/${key}`)
      // Have tried all the below, too
      // return requestInfoUtils.parseRequestUrl(`api/${set}/${key}`)
      // return requestInfoUtils.parseRequestUrl(`/${set}/${key}`)
      // return requestInfoUtils.parseRequestUrl(`${set}/${key}`)
    }
    return undefined;
  }
}

Это мой запрос:

api/stuff(1)

Мой код доходит до регистрации Found with key с правильными значениями set и key, но я все равно получаю 404.

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

1 Ответ

0 голосов
/ 26 марта 2020

Я решил это всего несколько минут спустя. Резиновая утка, эх.

return { apiBase: `${parts[0]}/`, collectionName: set, id: key } as ParsedRequestUrl;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...