Angular Universal не кэширует запросы POST с помощью TransferState

Я пытаюсь использовать ServerStateInterceptor и BrowserStateInterceptorв Angular Universal. Но я не могу получить POST запросы кэшируются или отправляются TransferState. Это мой код:

За ServerStateInterceptor

export class ServerStateInterceptor implements HttpInterceptor {
    constructor(private transferState: TransferState, private ngZone: NgZone) {}

    intercept(req: HttpRequest<any>, next: HttpHandler) {
        const cachedData = memoryCache.get(req.url);

        if (cachedData) {
            this.transferState.set(makeStateKey(req.url), cachedData);
            return of(new HttpResponse({ body: cachedData, status: 200 }));
        } else {
            console.log('---server failed ---', req.url);
        }

        return next.handle(req).pipe(
            tap(event => {
                if (event instanceof HttpResponse) {
                    this.transferState.set(makeStateKey(req.url), event.body);
                    this.ngZone.runOutsideAngular(() => {
                        memoryCache.put(req.url, event.body, 1000 * 60);
                    });
                }
            })
        );
    }
}

И для BrowserStateInterceptor

export class BrowserStateInterceptor implements HttpInterceptor {
    constructor(private transferState: TransferState) {}

    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        if (req.method !== 'GET' && req.method !== 'POST') {
            return next.handle(req);
        }

        const storedResponse: string = this.transferState.get(makeStateKey(req.url), null);

        if (storedResponse) {
            const response = new HttpResponse({ body: storedResponse, status: 200 });
            return of(response);
        } else {
            console.log('---browser failed ---', req.url);
        }

        return next.handle(req);
    }
}

По какой причине когда-либо мой POST запросы не возвращаются из transferState и я правда не понимаю почему или что делаю не так?

Как мне протестировать? Все GET и POSTзапросы отправляются в PHP REST-API. Существует error_log(...). Error_log показывает GETзапросы разовые. Но POST запросы вызываются каждый раз.

Когда я проверяю HTML-код страницы, я вижу, что содержимое POST включено, но не будет использоваться BrowserStateInterceptor. Вместо этого полный вызов REST-API выполняется снова и снова.

Кто-нибудь может показать мне, как я могу подать заявку TransferState к POST запросы тоже.

0 ответов

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