NEWS
gelöst: Unterschied Filezugriff Admin 5.x/4.x
-
Hallo!
Ich habe meinen Adapter meteoalarm neu programmiert (Testphase läuft grad) , und zum Testen gleich den neuen Admin version 5 genutzt. Nun stellt sich raus, das sich dieser irgendwie anderst verhält, wenn ich auf Dateien zugreife. Dieser Code funktioniert gut bei Admin v5.1.9:
fs.createReadStream('./admin/geocodes-aliases.csv') .pipe(parseCSV({delimiter: ','})) .on('data', function(csvrow) { csvContent.push(csvrow); }) .on('end',function() { //do something with csvData //adapter.log.debug(csvContent); resolve(csvContent); }) .on('error', reject);
Die Datei liegt auf Github im Admin Ordner. Wenn ich den selben Code unter Admin 4.1.2 laufen lassen, bekommen ich diesen Fehler:
Error: ENOENT: no such file or directory, open './admin/geocodes-aliases.csv'
Wie kann das sein?
PS: Es könnte vielleicht auch mit unterschiedlichen js- controller Versionen zu tun haben. Funktioniert mit 3.3.10 (beta) , funktioniert nicht mit 3.2.16 (stable)
-
Hi
Zwei Kommentare meinerseits:
-
Wenn du den Adapter neu schreibst, würde ich den neu generieren mit dem Adapter Creator. Gibt dir vielleicht eine Stunde zu tun, aber danach hast du den Code möglichst nahe an "unserem" Standard und kannst von allen Neuerungen des Creators profitieren.
-
Zu dem Code:
async function getCSVData(){ return new Promise(
Eine Funktion, die kein
await
enthält, muss nicht alsasync
definiert werden.Zum eigentlichen Problem hast du ja im Chat schon einige Hinweise bekommen.
-
-
@unclesam Danke für deine Tipps, werde mir den Adapter Creator ansehen.
Das Problem ist inzwischen dank der Hilfe von @UncleSam und @Garfonso gelöst - folgender Code hat funktioniert (dank path.resolve):
fs.createReadStream(path.resolve(__dirname, 'geocodes-aliases.csv')) .pipe(parseCSV({delimiter: ','})) .on('data', function(csvrow) { //console.log(csvrow); //do something with csvrow csvContent.push(csvrow); }) .on('end',function() { //do something with csvData //adapter.log.debug(csvContent); resolve(csvContent); }) .on('error', reject);