我正在尝试构建一个节点/快速webapp,我点击一个按钮,将<div>
转换成pdf,zip和密码保护pdf,通过电子邮件发送给收件人,最后生成一个新的带有pdf的页面,所以我可以看到它正确呈现。
除了生成pdf的预览外,我还能正常工作。我对节点和http路由一般都是新手,所以我知道我遗漏了一些明显的东西。
表单成功将<div>
发送到服务器,服务器将其转换,压缩并成功邮寄。它还将pdf的副本保存在/public/pdfs
目录中。我确实要为静态目录包含app.use(express.static(path.join(__dirname, 'public')));
。我可以通过直接在浏览器中输入pdf来查看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);
});
答案 0 :(得分:0)
res.header(&#39; Location&#39;,&#39; example.com/redirect_location');
答案 1 :(得分:0)
嗯,事实证明这是一个时间问题。我在window.location命令周围放了一个2秒的超时函数,现在它可以工作了。
setTimeout(function(){window.location = data.fileURL},2000);
我尝试了1秒,但仍然遇到了同样的错误,所以事实证明wkhtmltopdf只需要不到2秒的时间来渲染文件。