Ich denke, ich bin ein wenig verwirrt, wie globale Variablen in Nodejs arbeiten. Ich habe diesen Code:Verwirrung über globale Variablen und wie man sie benutzt
var jsreport = require('jsreport-core')()
var fs = require('fs');
var path = require('path');
// make sure to pass the path to your `helper.js`
var helpers = fs.readFileSync(path.join('/Development/jsreport-new/data/templates/Sample report', 'helpers.js'), 'utf8');
var data = fs.readFileSync(path.join('/Development/jsreport-new', 'scratch.json').toString(), 'utf8');
var json = JSON.parse(data);
jsreport.init().then(function() {
return jsreport.render({
template: {
scripts: [{
content: "request.data={endpoints: json }; done();"
}],
content: fs.readFileSync(path.join('/Development/jsreport-new/data/templates/Sample report', 'content.handlebars'), 'utf8'),
helpers: helpers,
engine: 'handlebars',
recipe: 'phantom-pdf',
phantom: {
"orientation": "portrait",
"format": "A3",
"margin": "3cm",
"headerHeight": "3cm"
},
},
data: {
"books": [
{"name": "A Tale of Two Cities", "author": "Charles Dickens", "sales": 351},
{"name": "The Lord of the Rings", "author": "J. R. R. Tolkien", "sales": 125},
{"name": "The Da Vinci Code", "author": "Dan Brown", "sales": 255},
{"name": "The Hobbit", "author": "J. R. R. Tolkien", "sales": 99},
{"name": "Carlskii", "author": "J. R. R. Tolkien", "sales": 99}
]
}
}).then(function(resp) {
//prints pdf with headline Hello world
console.log(resp.content.toString())
resp.result.pipe(fs.createWriteStream('helloworld4.pdf'));
setTimeout(function() {
process.exit();
}, 3000)
});
}).catch(function(e) {
console.log(e)
});
Ich brauche die JSON-Daten zu übergeben, die von einer lokalen Datei in einer jsreport Vorlage zu lesen. d. h. es muss an den Inhalt innerhalb der Vorlage übergeben werden content: "request.data={endpoints: json }; done();"
Ich bekomme jedoch nur [Error: json is not defined]
.
Ich versuchte dann, die json Variable als globale Variable zu definieren. z.B. global.json = JSON.parse(data);
, aber es macht jetzt Unterschied.
fügen Sie Zitate um 'JSON.stringify (json)' hinzu. – alexmac
Vielen Dank für diese und die detaillierte Erklärung, was falsch gelaufen ist. Also ich denke, das Bit, das ich immer noch nicht verstehe, ist, warum die JSON-Variable für "JSON.Stringify" verfügbar ist? – user1513388
Gerne helfen! Die 'json'-Variable ist hier verfügbar, weil sie im Kontext des eigenen Moduls ausgeführt wird, bevor das' scripts'-Array an JsReport übergeben wird. Beachten Sie, dass der Wert der Eigenschaft content, die Sie bereitstellen, eine Zeichenfolge ist, bei der es sich um Code und keine Funktion handelt. Diese fragwürdige Anforderung von den Erstellern von JsReport ist, warum dieser Code losgelöst von seiner Schließung ausgeführt werden muss. Indem Sie Ihre Variable in eine Zeichenkette serialisieren und sie in das Berichtsskript _verfügen_ verbinden, bevor wir sie an JsReport übergeben, können wir die Daten während der Wiedergabe nach den ungewöhnlichen Regeln von JsReport senden. – Mark