2017-05-31 6 views
0

私はGoogleのクラウドトランスレーションAPIを使用してバックエンドのテキストを翻訳していますが、それをフロントエンドでレンダリングします。しかし、翻訳されたフレーズをエクスポートするのに問題があります。これはコードコピー/ドキュメントから貼り付けられたものです。私が加えたのは輸出だけでした。フロントエンドで翻訳されたフレーズをレンダリングしますか? (バックエンドからのフレーズのエクスポートに関する問題)

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); 
    }); 

その後、私のroutes.jsファイルで、私が持っている:コンソールは生産に

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

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

印刷翻訳 "未定義"。

+0

'translate.translate'は非同期操作であるので、' module.exports'はありません。最初は任意のデータであり、ファイルが必要なときに 'undefined'に設定されます。代わりに 'function'を返すようにしてください。 –

答えて

1

translate.translateは非同期操作であるため、最初にデータを持たないため、ファイルが必要なときにundefinedに設定されます。代わりにfunctionを返送してください。このような -

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); 
    }); 
}); 
関連する問題