NodeJS - 将转换后的文件发送到客户端进行下载

时间:2017-01-29 06:03:28

标签: javascript node.js pdf

目标:允许用户下载PDF

后台:以下代码生成car.pdf文件,并在加载localhost:3000/时将其存储到主项目的目录中。这很棒,因为我希望在数据库中找到Carid,生成一个把手模板,将数据从Car传递到其中,然后从已编译的HTML生成PDF < / p>

问题:我希望将PDF下载到用户的计算机,而不是将PDF保存到主项目的目录中。

我该怎么做?

这是我的代码。我正在使用NPM包:html-pdf

助手/出口helper.js

const fs             = require('fs');
const pdf            = require('html-pdf');
const Handlebars     = require('handlebars');

const { Car } = require('./../models/car');

var writePDF = (res) => {

  Car.findById({_id: '58857e256b639400110897af'})
    .then((car) => {
      var source = fs.readFileSync(__dirname + '/templates/car.handlebars', 'utf8');
      var template = Handlebars.compile(source);
      var file = template(car);
      pdf.create(file, { format: 'Letter' })
        .toFile('./car.pdf', (err, res) => {
          if (err) return console.log(err);
          console.log(res); // { filename: '/app/businesscard.pdf' }
        });
    })
    .catch((errors) => {
      console.log(errors);
    });
};

module.exports = { writePDF };

路由/ home.js

const express  = require('express');
const router   = express.Router();
const { writePDF } = require('./../helpers/export-helpers');

router.get('/', (req, res) => {
  writePDF();
});

module.exports = router;

2 个答案:

答案 0 :(得分:0)

你应该使用res.download。像这样

router.get('/', (req, res) => {
  res.download('car.pdf');
});

https://expressjs.com/en/api.html#res.download

答案 1 :(得分:0)

您必须通过响应客户端来管道创建的pdf。