@djapecom You are right, I had older version of node. Now I got a question. I want to use a jsreport-core in my nodejs app. But the only thing that this app wants to do is just take the api request and returns a render pdf as a stream or whatever. I just have a problem with setup.
And I made a small thing like that with express, but the problem that I have when I deployed in on azure windows web app with node >=8.9 is that making request to
the endpoint which takes used the jsreport-core, it hangs up for 2 minutes and then just timesout. I don't know, maybe my setup is wrong or maybe the jsreport core is using some different ports? It works locally, but not on azure.
Here is the code I have used
app.js
var JSREPORT_CONFIG = Object.freeze({
phantom: {
strategy: "phantom-server"
},
templatingEngines: {
numberOfWorkers: 1,
strategy: "http-server",
timeout: 60000
}
});
var jsreport = require('jsreport-core')(JSREPORT_CONFIG);
var express = require('express');
var bodyParser = require("body-parser");
var compression = require('compression');
var helmet = require('helmet');
var cors = require('cors');
var routes = require('./jsreport.pdf.api/routes');
var app = express();
app.use(cors());
app.use(compression());
app.use(helmet());
app.use(bodyParser.json({ limit: '100mb' }));
app.use(bodyParser.urlencoded({ limit: '100mb', extended: true }));
app.use(routes);
var PORT = process.env.PORT || 3000;
app.listen(PORT);
route
router.get("/api/generate", pdf_controller.pdfGetInstance);
and here is the controller
'use strict';
var jsreport = require('jsreport-core')();
jsreport.use(require('jsreport-phantom-pdf')());
jsreport.use(require('jsreport-handlebars')());
jsreport.init();
var ENGINE = "handlebars";
var RECIPE = "phantom-pdf";
exports.pdfInstance = function (req, res) {
var _req$body = req.body,
data = _req$body.data,
template = _req$body.template,
scripts = _req$body.scripts;
var phantom = template.phantom,
helpers = template.helpers,
content = template.content;
var header = phantom.header,
footer = phantom.footer,
headerHeight = phantom.headerHeight,
footerHeight = phantom.footerHeight,
format = phantom.format;
jsreport.render({
template: {
content: content,
engine: ENGINE,
recipe: RECIPE,
phantom: {
header: header,
footer: footer,
headerHeight: headerHeight,
footerHeight: footerHeight,
format: format
},
helpers: helpers
},
data: data,
options: {
timeout: 60000,
reportName: "Pdf Document"
}
})
.then(function (resp) {
res.send(resp.content);
})
.catch(function (resp) {
res.send(resp);
});
};
And as said. It works perfectly fine localy. On azure api endpoints other than this one works aswell. But the one with jsreport.render just hangs for 120000ms and timesout. I just want it to finally work :D, bought the license key but cannot make a use of it x_ x