Я пытаюсь загрузить сгенерированный 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. Оба работали локально, но, опять же, не при развертывании.
Не уверен, что мне не хватает или что я делаю неправильно, но любой вклад или помощь будет принята с благодарностью. Заранее спасибо.