2017-05-31 4 views
0

Ich benutze Google Cloud Translation API, um einen Text im Backend zu übersetzen, den ich dann am Frontend rendern möchte. Ich habe jedoch Probleme beim Exportieren der übersetzten Phrase. Dies ist der Code, der aus den Dokumenten kopiert/eingefügt wird. Das einzige, was ich hinzugefügt habe, war der Export.Rendern der übersetzten Phrase am Frontend? (Probleme beim Exportieren der Phrase aus dem Backend)

const text = "text"; 
const target = "en"; 
translate.translate(text, target) 
    .then((results) => { 
    let translations = results[0]; 
    translations = Array.isArray(translations) ? translations : [translations]; 

    console.log('Translations:'); 
    translations.forEach((translation, i) => { 
     console.log(`${text[i]} => (${target}) ${translation}`); 
    }); 

    module.exports = translations; 

    }) 

    .catch((err) => { 
    console.error('ERROR:', err); 
    }); 

Dann in meiner routes.js Datei, die ich habe:

var translate = require('../translate'); 

router.get('/', function(req, res){ 
    var translate = translate; 
    console.log(translate); 
    res.render('index', { 'translate': translate }); 
}); 

Printing übersetzen zu der Konsole erzeugt "nicht definiert."

+0

Seit 'translate.translate' ein asynchroner Betrieb ist,' module.exports' nicht über irgendwelche Daten anfänglich und wird so auf "undefiniert" gesetzt, wenn die Datei benötigt wird. Versuchen Sie stattdessen, eine 'Funktion' zurückzugeben. –

Antwort

1

Da translate.translate eine asynchrone Operation ist, hat module.exports zunächst keine Daten und wird daher auf undefined festgelegt, wenn die Datei benötigt wird. Versuchen Sie stattdessen, function zurückzugeben. So -

translate.js

const text = "text"; 

const target = "en"; 

module.exports = function() { 
    return translate.translate(text, target) 
    .then(results => { 

     let translations = results[0]; 

     translations = Array.isArray(translations) ? translations : [translations]; 

     console.log('Translations:'); 

     translations.forEach((translation, i) => { 
     console.log(`${text[i]} => (${target}) ${translation}`); 
     }); 

     return Promise.resolve(translations); 
    }); 
}; 

routes.js

const translate = require('../translate'); 

router.get('/', function(req, res) { 

    translate() 
    .then(translations => { 
     res.render('index', { 'translate': translations }); 
    }) 
    .catch(error => { 
     console.log(error); 
     res.sendStatus(500); 
    }); 
}); 
Verwandte Themen