我一直在努力这一段时间,似乎无法找到答案,我正在开发一个网站与预算选项,我从客户端发送一个对象到服务器,并且该服务器正在使用PDFKit创建预算的PDF版本,一旦它被创建,我希望实际上将该PDF发送回客户端并触发下载,这是我的做res.download(NodeJS)没有触发在浏览器上下载
客户端代码:
let data = {
nombre: this.state.name,
email: this.state.email,
telefono: this.state.phone,
carrito: this.props.budget.cart,
subTotal: this.props.budget.subTotal,
IVA: this.props.budget.tax,
total: this.props.budget.subTotal + this.props.budget.tax
}
axios({
method: 'post',
url: 'http://localhost:1337/api/budget',
data: data
})
.then((response) => {
console.log('This is the response', response);
window.open('/download')
})
.catch((error) => {
alert(error);
})
,使数据转移到我的服务器端代码完美,它看起来像这样
const pdf = require('pdfkit');
const fs = require('fs');
const path = require('path');
exports.makePDFBudget = (req, res) => {
let myDoc = new pdf;
myDoc.pipe(fs.createWriteStream(`PDFkit/budget.pdf`));
myDoc.font('Times-Roman')
.fontSize(12)
.text(`${req.body.name} ${req.body.phone} ${req.body.email} ${req.body.cart} ${req.body.subTotal} ${req.body.total} ${req.body.tax}`);
myDoc.end()
}
这就是创建我的PDF,我现在想要的是,一旦它被创建并且响应被发送回客户端,客户端将打开一个新的窗口,该URL设置为下载PDF,但这并不是因为某些原因而发生的,它打开了新窗口,但下载从未启动,并且它绝对没有错误我是我的节点控制台或浏览器控制台 这是我如何将文件发送到客户端
const fs = require('fs');
const path = require('path');
exports.downloadPDFBudget = (req, res) => {
res.download(__dirname + 'budget.pdf', 'budget.pdf');
}
这就是我的服务器索引看起来像
const bodyParser = require('body-parser');
const express = require('express');
const app = express();
const api = express.Router();
const { makePDFBudget } = require('./PDFkit/makePDFBudget.js');
const { downloadPDFBudget } = require('./PDFkit/downloadPDFBudget.js')
app.use(express.static(__dirname + '/../public'));
app.use(bodyParser.urlencoded({extended: true}));
app.use(bodyParser.json({extended: true}));
api.route('/budget')
.post(makePDFBudget)
api.route('/download')
.get(downloadPDFBudget)
app.use('/api', api);
const port = 1337;
app.listen(port);
console.log('Listening on port ', port);
module.exports = app;
恭喜 – galkin