Невозможно отобразить xml, отправленный обратно из Express - PullRequest
0 голосов
/ 01 октября 2019

У меня есть базовый express и настроенный клиент, куда я отправляю xml-файл для экспресс-отправки, и после этого экспресс отправляет обратно xml, и я бы использовал blob, чтобы открыть его на другой вкладке (или сохранить):

Express отправляет обратно xml:

//inside express route
res.download("filename.xml");

Код клиента для отправки запроса POST и получения результата:

$.ajax({
        type: "POST",
        url: "http://localhost:3000/uploadXML",
       async: true,
       data: formData,
       cache: false,
       processData: false,
       contentType: false,
       responseType:"blob",
       enctype: 'multipart/form-data',
        timeout: 60000
    }).done(function(response){
      //display the xml using blob                                            
var blob = new Blob([response], {type: 'application/xml'});                                            
var fileURL = URL.createObjectURL(blob);  

//display in another tab                                          
var a = document.createElement("a");                                           
document.body.appendChild(a);                                       
a.style = "display: none";
a.href = fileURL;
a.target = '_blank';
a.click();
        }  
    });
};

Но при попытке всегда возвращается следующая ошибкадля отображения BLOB-объекта

This page contains the following errors:
error on line 1 at column 1: Document is empty

response header, захваченный из отладки Chrome, выглядел нормально:

Accept-Ranges: bytes
Access-Control-Allow-Origin: *
Cache-Control: public, max-age=0
Connection: keep-alive
Content-Disposition: attachment; filename="file_name_2.xml"
Content-Length: 3639426
Content-Type: application/xml
Date: Tue, 01 Oct 2019 10:50:13 GMT
ETag: W/"378882-16d86f12471"
Last-Modified: Tue, 01 Oct 2019 10:50:13 GMT
X-Powered-By: Express

Заголовок запроса с некоторой проблемой, но XML-файл все-таки достиг сервера

Provisional headers are shown
Accept: */*
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryeAaPlIkaO82olCLL
Origin: http://localhost:8383
Referer: http://localhost:8383/translationUI/index.html
Sec-Fetch-Mode: cors
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36

Ответ от Chrome также показан в формате xml. Но результат внутри done() очень странный для меня.

{URL: "http://localhost:8383/translationUI/index.html"
activeElement: null
adoptedStyleSheets: []
alinkColor: ""
all: HTMLAllCollection(32643) [start, legal_numbering_excha …]
anchors: HTMLCollection []
applets: HTMLCollection []
baseURI: "http://localhost:8383/translationUI/index.html"
bgColor: ""
body: null
characterSet: "UTF-8"
charset: "UTF-8"
childElementCount: 1
childNodes: NodeList ...//There is more}

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

...