Рендеринг страницы после создания PDF с кукловодом? - PullRequest
0 голосов
/ 06 марта 2020

В настоящее время я пытаюсь создать PDF-файл с кукловодом, а затем отобразить страницу с сообщением "спасибо" пользователю. Как только пользователь перейдет на эту страницу, Puppeteer PDF, как мы надеемся, начнет загрузку на компьютер пользователя. Но у меня проблемы.

Я могу успешно перенаправить пользователя на страницу, на которой он хочет, после сбора некоторой базовой c информации из формы:

app.post("/generatepdf", function (req, res) {

  UserPdfRequest.create({ email: req.body.email, companyName: req.body.companyName }, function (err, createdRequest) {
    if (err) {
      console.log(err);
    } else {
      console.log(createdRequest);
      res.redirect("/" + createdRequest._id + "/pdf-download");
    }
  })

});

Затем я отправляю его на свой маршрут, который обрабатывает найти нужного пользователя, сгенерировать PDF, затем отобразить страницу благодарности:

app.get("/:companyId/pdf-download", function (req, res) {

  UserPdfRequest.findById(req.params.companyId, function (err, foundRequest) {
    if (err) {
      console.log(err);
    } else {
      console.log(foundRequest);

      (async () => {
        const browser = await puppeteer.launch()
        const page = await browser.newPage()
        const url = 'http://localhost:3000/' + req.params.companyId + '/pdf-download';
        await page.goto(url, {waitUntil: 'networkidle0'});
        const buffer = await page.pdf({ format: "A4", printBackground: true });
        res.type('application/pdf')
        res.send(buffer)
        browser.close()
      })()

      res.render("pdfDownload", { email: foundRequest.email, companyName: foundRequest.companyName });
    }
  })

});

Но когда я попадаю на страницу благодарности, мой PDF не начинает загружаться. Кроме того, мой console.log (foundRequest), кажется, очень быстро регистрируется снова и снова в моем терминале, и я также получаю следующие ошибки:

https://imgur.com/ZsApRHn

Я знаю, что, вероятно, я здесь над головой, учитывая, что у меня нет большого опыта работы с asyn c. Я уверен, что это простое исправление, которое мне не хватает; Однако любая помощь (и объяснение) будет чрезвычайно ценной и ценной. Спасибо за ваше время!

1 Ответ

0 голосов
/ 07 марта 2020

Вы вызываете send и render для одного и того же объекта ответа. Вы можете отправить данные или отправить html, но вы не можете сделать это для того же запроса. Обычно это обходится путем открытия новой вкладки для скачивания.

...