Рендеринг текущей страницы с PhantomJS - PullRequest
0 голосов
/ 11 февраля 2019

Я создаю аналитическую информационную панель с использованием стека MERN (Express, Node). Важные моменты, на которые следует обратить внимание.

В рамках представления с тире я пытался выяснить, можно ли вызвать PhantomJS.позвоните, чтобы создать отчет в формате PDF с помощью кнопки на самой странице.

Поскольку вам необходимо войти в систему, чтобы увидеть собственную аналитику, я не могу просто запустить фантом из командной строки и передать его в URL одной из страниц панели мониторинга, так как для этого требуются логин и запросы.made.

Возможно ли это сделать с помощью phantomJS?

1 Ответ

0 голосов
/ 12 февраля 2019

Если я правильно понял ваш вопрос.

Пример:

[main.js]

  const dashboardToPdfCtrl = require("./controllers/phantom/pdf");  
  router.route("/api/dashboard/phantom").post(dashboardToPdfCtrl.createPdf);   
  router.route("/api/dashboard/phantom/html")
     .post(dashboardToPdfCtrl.createDashboard);

Когда пользователь нажимает «кнопку», вы можете подтвердитьПОЛЬЗОВАТЕЛЬ в соответствии с архитектурой вашего приложения.

[pdf.js]

 exports.createPdf= async (req, res) => {
            if (!req.user || !req.user.sub) {
        return res
          .status(401)
          .send({ message: 'No authorization token was found' });
      }
          const instance = await phantom.create();
          const page = await instance.createPage();

         const settings = {
            operation: "POST",
            encoding: "utf8",
            headers: {
              "Content-Type": "application/json"
            },
            data: JSON.stringify({
              user: req.body.userId,
              anyDataYouNeedToRender: req.body.anyDataYouNeedToRender
            })
          };
    //POST request to /api/dashboard/phantom/html
            await page.open(
            `${process.env.HOST}:${
              process.env.PORT
            }/api/dashboard/phantom/html`,
            settings
          );
    //Save the content of /public/dashboard/dashboard.html with received data to pdf
          const pageSaved = await page.render(
            path.resolve(`./public/dashboard/file.pdf`)
          );

          if (pageSaved) await instance.exit();
        }

        exports.createDashboard = (req, res) => {
          res.render(
            path.resolve("./public/dashboard/dashboard.html"),
            { user: req.body.user,
              anyDataYouNeedToRender: req.body:anyDataYouNeedToRender
            }
          );
        };

Это то, что вы искали?Я хочу помочь вам, не стесняйтесь спрашивать детализацию.

PS Как уже говорили друзья в комментариях, будет здорово, если вы дадите нам больше информации, чтобы понять вашу цель.

...