Скачать PDF с Node.js Express для React CORS ошибка - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь загрузить сгенерированный PDF-файл из потока чтения и открыть его в новом окне приложения React.

Локально работает с NPM, но при развертывании в Azure (docker image to app service) Я получаю следующую ошибку CORS из выборки:

Access to fetch at 'https://trt-api.azurewebsites.net/order/getRateSheet?order_id=' from origin 'https://trt-site.azurewebsites.net' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

Я убедился, что настройки CORS в azure службах приложения отключены, так как я хотел, чтобы мой код диктовал политику , Все остальные аспекты приложения (basi c application / json GET / POST), кроме этого.

Вот команда извлечения:

var viewPDF = () => {
 fetch(url, {
    method: "get",
    headers: {
      Authorization: ""
    }
  })
    .then(response => response.blob())
    .then(blob => URL.createObjectURL(blob))
    .then(url => window.open(url))
    .catch(err => console.error(err));
  }

Вот Node.js код:

//create rate sheet
    app.get('/order/getRateSheet', async (req, res) =>{

        var htmlCode = await createRateSheet(orders[0], orderLine);

        var pdf = require('html-pdf');
        // pdf.create(htmlCode).toStream(function(err, readStream){
        //   // When the stream is done being read, end the response
        //   readStream.on('close', () => {
        //     res.end()
        //   })

        //   // Stream chunks to response
        //   //res.setHeader('Content-Length', stat.size);
        //   res.setHeader('Access-Control-Allow-Origin', "*");
        //   res.setHeader('Content-Type', 'application/pdf');
        //   res.setHeader('Content-Disposition', 'inline; filename=test.pdf');
        //   readStream.pipe(res);
        // });

        pdf.create(htmlCode).toFile(`./test.pdf`, function(err, resPDF){
          console.log(resPDF);
          res.setHeader('Access-Control-Allow-Origin', "*");
          res.setHeader('Content-Type', 'application/pdf');
          res.setHeader('Content-Disposition', 'inline; filename=test.pdf');
          res.sendFile(resPDF.filename);
        })
     });

Вот мое инициирование cors на сервере:

const app = express();
const cors = require('cors');

//cors policy
var corsOptions = {
  origin: "*",
  optionsSuccessStatus: 200,
  exposedHeaders: 'Content-Disposition'
}
app.use(cors(corsOptions));

Как вы можете видеть, я пытался использовать res.sendFile () и .pipe (res) от Express. Оба работали локально, но, опять же, не при развертывании.

Не уверен, что мне не хватает или что я делаю неправильно, но любой вклад или помощь будет принята с благодарностью. Заранее спасибо.

...