Javascript module.exports返回未定义

Javascript module.exports返回未定义,javascript,node.js,ibm-watson,module.exports,Javascript,Node.js,Ibm Watson,Module.exports,我试图在“服务/ibmWatson/index.js中使用IBM Watson API创建一个翻译函数。我正确地接收到响应,但当我将响应返回到“IncidentController.js”时,它接收到未定义的响应 const LanguageTranslatorV3 = require('ibm-watson/language-translator/v3'); const { IamAuthenticator } = require('ibm-watson/auth'); module.exp

我试图在“服务/ibmWatson/index.js中使用IBM Watson API创建一个翻译函数。我正确地接收到响应,但当我将响应返回到“IncidentController.js”时,它接收到未定义的响应

const LanguageTranslatorV3 = require('ibm-watson/language-translator/v3');
const { IamAuthenticator } = require('ibm-watson/auth');

module.exports = {
    async translate(phrase, language) {

        const languageTranslator = new LanguageTranslatorV3({
            authenticator: new IamAuthenticator({ apikey: '<my_API_key>' }),
            url: 'https://gateway.watsonplatform.net/language-translator/api/',
            version: '2020-03-28',
        });

        await languageTranslator.translate(
            {
                text: phrase,
                source: 'pt',
                target: language
            })
            .then(response => {
                if(response.status=200){
                    console.log(response.result.translations);
                    return(response.result.translations);
                }
                return (["error"]);
            })
            .catch(err => {
                console.log('error: ', err);
                return (["error"]);
            });
    }
}
在IncidentController.js中:

const Watson = require('../../src/services/ibmWatson');
const db_connection = require('../database/connection');

module.exports = {
        async index(request, response) {
            const incidents = await db_connection('incidents').join('ongs', 'ongs.id', '=', 'incidents.ong_id')
                .select([
                        'incidents.*',
                        'ongs.name',
                            'ongs.uf']
                    );

            const titles = [];
            incidents.forEach((incident) => { titles.push(incident.title) });

            const translated_titles = await Watson.translate(titles, "en");
            console.log(translated_titles);

            return response.json(incidents);
    }
}
在上面的代码中,console.log(response.result.translations)返回未定义的


有什么问题吗?

您正在将
response.result.translations
返回到
response
回调,该回调来自
then()
。 由于IncidentController无法访问该回调,因此它返回
未定义的
。 这是解决此问题的一种方法:

//服务/ibmWatson/index.js
翻译(短语、语言){
返回新承诺((解决、拒绝)=>{
试一试{
const response=await language translator.translate({/*options*/});
解析(响应);//返回翻译
}捕获(错误){
拒绝(错误);//如果有错误,返回错误
}
});
}
//IncidentController.js
异步索引(){
// ...
const translatedTitles=wait Watson.translate(标题“en”);
console.log(translatedTitles);//现在应该可以工作了
}

我希望我能帮助您,或者至少能引导您朝正确的方向前进。

您正在返回
response.result.translations
response
回调,从
then()
。 由于IncidentController无法访问该回调,因此它返回
未定义的
。 这是解决此问题的一种方法:

//服务/ibmWatson/index.js
翻译(短语、语言){
返回新承诺((解决、拒绝)=>{
试一试{
const response=await language translator.translate({/*options*/});
解析(响应);//返回翻译
}捕获(错误){
拒绝(错误);//如果有错误,返回错误
}
});
}
//IncidentController.js
异步索引(){
// ...
const translatedTitles=wait Watson.translate(标题“en”);
console.log(translatedTitles);//现在应该可以工作了
}

我希望我能帮助你,或者至少能引导你走向正确的方向。

是的,它解决了问题。非常感谢你帮助我。很高兴我能帮上忙!是的,它解决了这个问题。非常感谢你帮助我。很高兴我能帮上忙!
const Watson = require('../../src/services/ibmWatson');
const db_connection = require('../database/connection');

module.exports = {
        async index(request, response) {
            const incidents = await db_connection('incidents').join('ongs', 'ongs.id', '=', 'incidents.ong_id')
                .select([
                        'incidents.*',
                        'ongs.name',
                            'ongs.uf']
                    );

            const titles = [];
            incidents.forEach((incident) => { titles.push(incident.title) });

            const translated_titles = await Watson.translate(titles, "en");
            console.log(translated_titles);

            return response.json(incidents);
    }
}