Один и тот же ответ на разные наблюдаемые подписки - PullRequest
1 голос
/ 08 апреля 2020

Проблема, шаги следующие:

  1. У меня есть 2 или более конечных точек, одна из которых - метод GET, который возвращает ArrayBuffer в качестве ответа.
  2. Как только вызывается эта конечная точка 'GET', и после успеха, если я делаю какие-либо вызовы PUT / POST, внутри моей наблюдаемой подписки появляется тот же ArrayBuffer
  3. Однако из остальных конечных точек ответ корректен при проверке во вкладке сети браузера

Пробовал следующее:

HTML:

<div *ngFor="let link of files">
    <span (click)="getDocument(link)">
        {{ link?.fileName }}
    </span>
</div>
<ngx-extended-pdf-viewer *ngIf="objectUrl"
  [showDownloadButton]="true"
  height="100%"
  [src]="objectUrl"
  [zoom]="'page-width'"
  useBrowserLocale="false">
</ngx-extended-pdf-viewer>

<dx-button [width]='85' [height]='30' type="action" (onClick)='addDocument()'>
</dx-button>

.ts файл :

   export class DownloadDocument implements OnInit {

   ngOnInit(){}

   getDocumentSubscription: Subscription;
   objectUrl :string;
   files : [{fileName:'sample'},{fileName:'TestDoc'}]

   getDocument(params){

   this.getDocumentSubscription =  this.myService.getDocument(url,params,headers).subscribe((data:any)=>{
   var blob = new Blob([data], {type: "octet/stream"});
   this.objectUrl = URL.createObjectURL(blob);  //sending this blob to ngx-extended-pdf-viewer as i knew thats a pdf

  },(err) => {
     if (err) {
       console.log('error', err); 
     }
  });
 }


  this.myService.addFiles(this.files).subscribe
 ((postCallResponse) =>{
     //original response in network from service is  { name:'kishore',id:1 }

     /** 
     * postCallResponse contains ArrayBuffer which is from above GET call 
     */
     console.log("printing post call response",postCallResponse);
});

 }

  ngOnDestroy(){
  if(this.getDocumentSubscription){
  this.getDocumentSubscription().unsubscribe();

  }
  }

service.ts:

  getDocument(url,params,headers):Observable<ArrayBuffer>{
     headers.contentType='application/octet-stream';
     headers.responseType='ArrayBuffer';
     return this.http.get(url,{params, ...headers});
  }

addFiles(data): Observable<any>{
   return this.http.post<any>(url, data); 
} 

Ожидаемый результат:

Подписанные данные содержат соответствующие ответы на запросы API

1 Ответ

0 голосов
/ 09 апреля 2020

Я выяснил проблему, когда выполнял вызов get в приложении my in. js есть перехватчик, изменяющий объект заголовков , который воздействует на все остальные вызовы и запросы API-вызовов

так что это был тот преступник

app.all("/getDocument/*", (req, res) => {
  req.originalUrl = req.originalUrl.replace("/getDocument/", "/");
  var options = {
    url: properties.propertiesServiceUrl + req.originalUrl,
    method: req.method,
    headers: {
      "content-type": "application/octet-stream", 
       "responseType"  :'ArrayBuffer'
    }
  };

  request(options, function (error, response, body) {

    if (error) {
      //console.log(error);
      res.status(500).send(null);
    } else if (response && response.statusCode) {
      //console.log('Response Status Code:' + response.statusCode);

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