在前端翻译翻译的短语? (从后端导出短语有问题)

时间:2017-05-31 17:43:44

标签: node.js

我使用Google的Cloud Translation 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 });
});

打印转换到控制台会产生" undefined。"

1 个答案:

答案 0 :(得分:1)

由于translate.translate是异步操作,module.exports最初没有任何数据,因此在需要文件时设置为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);
    });
});
相关问题