【发布时间】:2020-10-17 03:54:49
【问题描述】:
我正在运行一个 NodeJS 脚本,它将生成几个 PDF 报告。
问题是我需要为每个 PDF 生成几个图形,所以在几个问题之后,我决定生成 PNG 格式的图形,然后,使 html 页面包含图像。从 HTML 中,我生成了一个 PDF。
问题是我真的不需要路线,但我需要 EJS,我需要 req / res 来生成我的图表:
app.get("/operations/:operation/meters/:meter/weekly_report", async (req, res) => { // Used to generate PNG from graph
const meterId = req.params.meter;
const week = req.query.week;
// get meters from meter
const meter = meters.find(it => it.prm === meterId);
const weeklyData = await generateWeeklyGraphForPRM(meter, week);
ejs.renderFile(path.join(__dirname, './views/partials/', "weekly_graph.ejs"), {
days: weeklyData.days,
conso: weeklyData.consoByHour,
meterLabel: meter.label,
}, (err) => {
if (err) {
res.send(err);
} else {
res.render('partials/weekly_graph.ejs', {
days: weeklyData.days,
conso: weeklyData.consoByHour,
meterLabel: meter.label,
});
}
});
然后:
async function makePngScreenshot(url, meterId, filename) {
axios.get(url, null); // Make the request to generate html page
const destination = "public/images/" + operation.data.name + "/" + DATE_INI + "_" + DATE_END + "/" + meterId
return new Pageres({delay: 2, filename: filename})
.src(url, ['1300x650'], {crop: true})
.dest(destination)
.run()
}
});
一切正常,但现在,一切都在 index.js 中
我正在尝试将代码分成几个文件。
当我将每个路由提取到 routes.js 中时,我遇到的问题是我无法与所有端点共享任何全局变量。
所以,我在这里找到了 3 个解决方案:
- 使用函数而不是端点:我不需要端点,但我不知道如何渲染没有路由的 EJS 文件,req / res。
- 在每个路由中,再次获取每个对象(效率低下)
- 使用 redis 或任何缓存(好的,但我现在想避免使用任何额外的组件)
最简单的应该是把路由转成函数,但是没有路由怎么生成EJS文件,有可能吗?
【问题讨论】:
-
对不起,我不太明白你不需要路由是什么意思?您是否要创建一个脚本,将输入数据传递给该脚本,它会执行任务并停止其工作?
-
是的,完全正确。我不需要 API,因为这是触发的工作
标签: node.js express routes ejs