Ich versuche, eine Excel-Arbeitsmappe mit Excel Builder zu erstellen und die Daten mit Informationen aus einer MySQL-Datenbank zu füllen. Das ist meine get-Methode:Async Node JS Abfrage Verbindung
app.get('/excel', function(req, res) {
var locationSpread = ['location1.xlsx', 'location2.xlsx',
'location3.xlsx'];
locationSpread.forEach(function(filename) {
fs.unlink("./Spreadsheets/" + filename, (err) => {
if (err) {
console.log('Spreadsheet ' + filename + ' not found');
} else {
console.log('Spreadsheet ' + filename + ' successfully found');
}
});
var query = connection.query('SELECT * from ' + filename.slice(0, -5), function(err, rows) {
var workbook = excelbuilder.createWorkbook('./Spreadsheets/', filename);
var sheet = workbook.createSheet(filename.slice(0, -5), 3, rows.length);
sheet.set(1, 1, 'First Name');
sheet.set(2, 1, 'Last Name');
sheet.set(3, 1, 'Company');
*** TROUBLE CODE START HERE ***
for (var j = 2, z = 0; z < rows.length; j++, z++) {
sheet.set(1, j, rows[z].firstName);
sheet.set(2, j, rows[z].lastName);
sheet.set(3, j, rows[z].company);
}
*** TROUBLE CODE END HERE ***
workbook.save(function(err) {
console.log('workbook saved ' + (err ? 'failed' : 'ok'));
});
});
});
});
Das erste, was ich tun ist, um die Dateien löschen, wenn sie Tabellen im Ordner vorhanden ist. Dann frage ich die Datenbank basierend auf dem Standort ab. Ich erstelle eine neue Arbeitsmappe und ein Arbeitsblatt und schreibe darauf. Die for-Schleife bricht das Programm und während der Fehler ist:
TypeError: Cannot read property '1' of undefined
Ich glaube, es ist etwas entlang der Linien von Asynchron
Wo verwenden Sie Async? Sind Sie sicher, dass es nicht die Zeile 'sheet.set (1, ...' die Ursache des Fehlers ist? Können Sie den aufrufenden Stapel der Ausnahme posten? – lilezek
Der Fehler kann hier eingesehen werden: https://pastebin.com ./gKpBvUQx Aber im Grunde, wenn ich innen ohne die for-Schleife diesen Code auszuführen waren, es funktioniert perfekt – NodeJSNoob