Я пытаюсь отобразить свой PDF-файл в браузере на новой вкладке, но у меня такое ощущение, что React Router берет верх и не отображает его правильно.
Вот моя функция React в интерфейсе, которая должна откройте PDF-файл:
const openPDF = (e) => {
const prettyPDFName = e.target.textContent;
openPDFAsync(prettyPDFName);
console.log('pdfTextContent: ', prettyPDFName);
const prettyFileName =
prettyPDFName
.substring(0, prettyPDFName.length - 4)
.replace(/[ ,.]/g, '') + '.pdf';
window.open(`/pdf/${prettyFileName}`, '_blank');
};
Это открывает новую вкладку с правильным URL-адресом в адресной строке. Но он просто показывает мое приложение React с навигацией вверху и пустым содержимым посередине.
Я нашел кое-что на SO, чтобы помешать React Router захватить определенный маршрут c. Итак, в моем приложении. js Я пробовал это:
const pdf_regex = /^\/pdf\/.*/;
// if using "/pdf/" in the pathname, don't use React Router
if (pdf_regex.test(window.location.pathname)) {
return <div />; // must return at least an empty div
} else {
// use React Router
return (
<Router>
...
Это просто отображает полностью пустую страницу, а когда я проверяю, только пустой div, которого, я думаю, и следовало ожидать.
Для получения дополнительной информации, вот код узла, который вызывается из вызова openPDFAsync(prettyPDFName);
:
router.get('/openPDFFile', async (req, res) => {
const pretty_PDF_name = req.query.pdf;
const pdfFilename = (await SDS.getPDFFileName({ pretty_PDF_name }))
.dataValues.sheet_file_name;
const cleanPDFName =
pretty_PDF_name
.substring(0, pretty_PDF_name.length - 4)
.replace(/[ ,.]/g, '') + '.pdf';
const pdfFilepath = `./path/to/file/${pdfFilename}`;
console.log(cleanPDFName, pdfFilepath);
router.get(cleanPDFName, async (req, res) => {
res.sendFile(__dirname + pdfFilepath);
});