Я пытаюсь создать узел / экспресс-веб-приложение, в котором я нажимаю кнопку, которая превращает <div>
в pdf, zip и пароль защищают pdf, отправляют его по электронной почте получателю и в конце создают новую страницу сPDF, так что я вижу, что он отображается правильно.
У меня все работает, кроме генерации предварительного просмотра PDF.Я довольно плохо знаком с узлами и маршрутами http в целом, поэтому я знаю, что мне не хватает чего-то очевидного.
Форма успешно отправляет <div>
на сервер, сервер преобразует его, архивирует и отправляет по почтеуспешно.Он также сохраняет копию файла PDF в каталоге /public/pdfs
.Я действительно включил app.use(express.static(path.join(__dirname, 'public')));
для статических каталогов.Я могу получить доступ к файлу PDF, напрямую набрав его в браузере, но не могу загрузить его автоматически после отправки на сервер.
В окне браузера отображается:
Cannot GET /pdfs/2018_5_5_wj.pdf
В консоли браузера отображается:
Failed to load resource: the server responded with a status of 404 (Not Found)
Refused to apply a stylesheet because its hash, its nonce, or 'unsafe-inline' appears in neither the style-src directive nor the default-src directive of the Content Security Policy.
Я могу просто обновить страницу, и она прекрасно отображает PDF в браузере.Есть ли какая-то проблема синхронизации между отправкой перенаправления (которое происходит мгновенно) и генерацией pdf (которое занимает несколько миллисекунд)?
(клиент)
$("#testPostButton").click(function () {
fileName = fileNamer();
var formText = $("#formText").html();
$.ajax({
url: '/',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({formText:formText,fileName:fileName}),
success: function(data) {
console.log(data.fileURL);
setTimeout(function(){window.location = data.fileURL},2000);
}
});
});
(сервер)
app.post('/', function (req, res) {
//console.log(req.body);
formText = req.body['formText'];
fileName = req.body['fileName'];
console.log(fileName)
//console.log(formText);
var wkhtmltopdf = require('wkhtmltopdf');
options = {
'page-size': 'Letter',
'margin-top': '0.75in',
'margin-right': '0.75in',
'margin-bottom': '0.75in',
'margin-left': '0.75in',
'encoding': "UTF-8",
'dpi': 800,
'output': './public/pdfs/' + fileName,
};
wkhtmltopdf(formText, options);
console.log('pdf generated');
zipName = zipFile(fileName);
console.log('zip generated:' + zipName);
emailFile();
var data = JSON.stringify({fileURL:'http://localhost:3000/pdfs/'+fileName});
res.contentType('application/json');
res.header('Content-Length', data.length);
res.end(data);
});