我使用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。"
答案 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);
});
});