Return 来自 Google Cloud Translate API 节点 JS 中的值
Return value from Google Cloud Translate API in Node JS
我正在玩 Google Cloud Translate API 使用 NodeJS。我可以 console.log 从承诺中返回的值。但我不确定如何将该值传递到像 EJS 这样的模板文件中。屏幕上显示的只是 [object Promise]。
这是我的代码:
var express = require('express');
var app = express();
app.set('view engine', 'ejs');
// Imports the Google Cloud client library
const Translate = require('@google-cloud/translate');
// Your Google Cloud Platform project ID
const projectId = process.env.GOOGLEPROJECTID;
// Instantiates a client
const translateClient = Translate({
projectId: projectId
});
// The text to translate
const text = 'Hello, world!';
// The target language
const target = 'ru';
// Translates some text into Russian
let russianTranslate = translateClient.translate(text, target)
.then((results) => {
const translation = results[0];
console.log(`Translation: ${translation}`);
return {textToTranslate: `Text: ${text}`}
});
app.get('/', function(req, res){
res.render('index', { translation: russianTranslate });
});
app.listen(8080, function() {
console.log('App Started!');
});
它 console.log 很好,但我在使用 EJS 时没有得到相同的值。
我该如何解决这个问题?
首先解决承诺,而不是按原样传递它
问题是您实际上并没有将翻译后的字符串传递给模板,而是将 return 翻译的承诺对象传递给了模板。这就是为什么您会得到 [object Promise]
作为结果。
在您的代码中,已翻译的字符串被分配给回调函数内的 results[0]
。这意味着您需要将该变量传递给渲染器,但由于它仅在您的回调中可用,因此您需要确保它先完成。
最简单的方法是将使用它的任何代码移动到 .then()
的回调中,然后从那里继续。
// Translates some text into Russian
translateClient.translate(text, target)
.then((results) => {
app.get('/', function(req, res){
res.render('index', { translation: results[0] });
});
app.listen(8080, function() {
console.log('App Started!');
});
});
免责声明:这是未经测试的凌晨 3 点 back-of-the-envelope 代码。
我正在玩 Google Cloud Translate API 使用 NodeJS。我可以 console.log 从承诺中返回的值。但我不确定如何将该值传递到像 EJS 这样的模板文件中。屏幕上显示的只是 [object Promise]。 这是我的代码:
var express = require('express');
var app = express();
app.set('view engine', 'ejs');
// Imports the Google Cloud client library
const Translate = require('@google-cloud/translate');
// Your Google Cloud Platform project ID
const projectId = process.env.GOOGLEPROJECTID;
// Instantiates a client
const translateClient = Translate({
projectId: projectId
});
// The text to translate
const text = 'Hello, world!';
// The target language
const target = 'ru';
// Translates some text into Russian
let russianTranslate = translateClient.translate(text, target)
.then((results) => {
const translation = results[0];
console.log(`Translation: ${translation}`);
return {textToTranslate: `Text: ${text}`}
});
app.get('/', function(req, res){
res.render('index', { translation: russianTranslate });
});
app.listen(8080, function() {
console.log('App Started!');
});
它 console.log 很好,但我在使用 EJS 时没有得到相同的值。
我该如何解决这个问题?
首先解决承诺,而不是按原样传递它
问题是您实际上并没有将翻译后的字符串传递给模板,而是将 return 翻译的承诺对象传递给了模板。这就是为什么您会得到 [object Promise]
作为结果。
在您的代码中,已翻译的字符串被分配给回调函数内的 results[0]
。这意味着您需要将该变量传递给渲染器,但由于它仅在您的回调中可用,因此您需要确保它先完成。
最简单的方法是将使用它的任何代码移动到 .then()
的回调中,然后从那里继续。
// Translates some text into Russian
translateClient.translate(text, target)
.then((results) => {
app.get('/', function(req, res){
res.render('index', { translation: results[0] });
});
app.listen(8080, function() {
console.log('App Started!');
});
});
免责声明:这是未经测试的凌晨 3 点 back-of-the-envelope 代码。