2017-04-08 3 views
2

Ich versuche herauszufinden, wie Wert von xml Datei erhalten und diesen Wert zur Konsole ausgeben.nicht Ausgabe von Funktion

const path = require('path'); 
const fs = require('fs'); 
const parseString = require('xml2js').parseString; 

const sourceFile = path.join(__dirname, 'books.xml'); 

const document = (sourceFile, callback) => { 
    fs.readFile(sourceFile, { encoding: 'utf-8' }, function (err, data) { 
    if (err) { 
     return err; 
    } 

    parseString(data, (err, result) => { 
     result.catalog.book.forEach(users => { 
     callback(users.email); 
     }); 
    }); 
    }); 
}; 

console.log(document(sourceFile, data => data)); 

Die XML selbst ist sehr einfach:

<catalog> 
    <book id="bk101"> 
     <author>Gambardella, Matthew</author> 
     <title>XML Developer's Guide</title> 
     <email>[email protected]</email> 
    </book> 
</catalog> 

Aber was ich von der Funktion bin immer ist undefined. Warum passiert das?

Update: Ich versuche, zurückgegebene Wert senden

transporter.sendMail({ from: '[email protected]', to: document(sourceFile, (data) => data), subject: 'Message', text: 'I hope this message gets sent!', }, (err, info) => { if (err) { console.log('error!'); console.log(err.message); } else { console.log('sucess!'); console.log(info.messageId); console.log(info.response); } 

nodemailer aber ich erhalte eine Fehlermeldung: ' ' ' Fehlende erforderlich Header' To

Antwort

1

Sie drucken nicht den Wert der Daten, sondern drucken den zurückgegebenen Wert der document Funktion (die nichts zurückgibt, also undefined).

Ich habe den Code geändert, so dass jetzt wird es funktionieren, wie Sie gewünscht,

const path = require('path'); 
const fs = require('fs'); 
const parseString = require('xml2js').parseString; 

const sourceFile = path.join(__dirname, 'books.xml'); 

const document = (sourceFile, callback) => { 
    fs.readFile(sourceFile, { encoding: 'utf-8' }, function (err, data) { 
    if (err) { 
     return err; 
    } 

    parseString(data, (err, result) => { 
     result.catalog.book.forEach(users => { 
     callback(users.email); 
     }); 
    }); 
    }); 
}; 

document(sourceFile, data => console.log(data)); 

Update: Wie pro OP Kommentar,

const path = require('path'); 
const fs = require('fs'); 
const parseString = require('xml2js').parseString; 

const sourceFile = path.join(__dirname, 'books.xml'); 

const document = (sourceFile, callback) => { 
    fs.readFile(sourceFile, { encoding: 'utf-8' }, function (err, data) { 
    if (err) { 
     return err; 
    } 

    parseString(data, (err, result) => { 
     result.catalog.book.forEach(users => { 
     callback(users.email); 
     }); 
    }); 
    }); 
}; 

document(sourceFile, data => { 
    transporter.sendMail({ from: '[email protected]', to: data, subject: 'Message', text: 'I hope this message gets sent!', }, (err, info) => { 
    if (err) { 
     console.log('error!'); 
     console.log(err.message); 
    } else { 
     console.log('sucess!'); 
     console.log(info.messageId); 
     console.log(info.response); 
    } 
    }); 
}); 
+0

Ich versuche, zurückgegebene Wert senden nodemailer 'transporter.sendMail ({ aus: '[email protected]', zu: Dokument (source, (Daten) => Daten), Betreff: 'Nachricht', Text: ' Ich hoffe, diese Nachricht wird gesendet! ', }, (err, info) => { if (err) { console.log (' error! '); console.log (err.message); } else { console.log ('Erfolg!'); Konsole.log (info.messageId); console.log (info.response); } ' aber das ist der Fehler, den ich bin interting: 'fehlenden Header' zu '.' –

+0

@ KarolisArbačiauskas, bitte fügen Sie ein Update zu der Frage für das gleiche, wird meine Antwort zu aktualisieren. Also Frage Antwort bleibt synchron. –

+0

@ KarolisArbačiauskas Ich habe Update-Patch hinzugefügt, um zu antworten. –