Лучший способ передать данные запроса Mongodb в Pug - PullRequest
0 голосов
/ 19 июня 2020

Я ищу лучший способ передачи данных в мой файл index. js в приложении webdev. Обратите внимание: на самом деле у меня только около месяца опыта веб-разработки, так что это, скорее всего, из-за отсутствия опыта. вот мой поток программного обеспечения:

  1. Я запрашиваю данные в обработчике маршрута перед отображением страницы. Затем я передаю эти данные на обработанную страницу (обратите внимание, что мне нужно скрыть некоторые ключевые значения. Однако агрегация работает).

    exports.getPlotView = asyn c (req, res, next) = > {// захватываем модуль для запроса, сохраненный как var.testModel const qParse = new PlotQueryParse (req.query) .parseObj (); // console.log (qParse) // const testblockName = qParse.testblock + "Имя"; // const limitName = qParse.limitname;

     const aggregationObj = {$match:
                                 {'jobId':qParse.jobId, '<key2>':<val2>, "<key>":"<val>"}
                             }
    
     const data = await qParse.testModel.aggregate([aggregationObj]);
     console.log(data[0])
     const dataString = JSON.stringify(data[0]);
     //parse the url to make the query
     res.status(200).render('testPlotView', {
         pageHeader: "Test",
         subHead: "Test summary",
         IPn: "IPn",
         inData:dataString
     });
    

    }

  2. данные передаются в шаблон pug. Шаблон использует это как скрытый элемент

     extends base
     block content
         div.hide_data #{inData}
    
         div#dataviz
    
  3. теперь в моем индексе. js скрипт (слушает вечера), данные загружаются со страницы и затем сохраняются для публикации обработка. Я хотел бы получить прямой доступ к переменной, а не скрывать ее, а затем получить доступ к элементу DOM.

    window.addEventListener ('load', function () {if (window.location.href.includes ('testplotdata' )) {console.log ('its a me mario') // если мы находимся на странице данных тестового графика, позволяет построить график var jsonObject = JSON .parse (document.querySelector ('. hide_data'). inner HTML); console.log (jsonObject ['testData'])

     //post processing code ....
    
     }
    

    })

Опять же, мне нужен способ получить мои запрошенные данные без сохранения это как элемент DOM, а затем доступ к нему в моем сценарии прослушивателя внешних событий.

Спасибо!

1 Ответ

1 голос
/ 22 июня 2020

Вместо того, чтобы хранить данные в HTML, добавьте в шаблон встроенный скрипт, чтобы сохранить его в глобальной переменной. Поэтому замените div.hide_data #{inData} на:

script.
   var inData = !{inData};   // inData passed by backend must be a string
                             // representing a valid JS object (JSON will do)

Теперь вы просто получаете доступ к inData как к готовому собственному объекту в вашем внешнем скрипте (который вам нужно убедиться, что он загружается после вышеуказанного скрипта, помещая его в конец из <body> подойдет)

// No need: var jsonObject = JSON.parse(document.querySelector('.hide_data').innerHTML);
console.log(inData);    // Go ahead with the data
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...