我正在开发一个带有后端的Web应用程序应用程序,该后端可以调用IBM Watson的Tone Analyzer Web服务。我的应用程序正在Heroku上提供。应用程序URL:https://watson-assist.herokuapp.com
和Github URL:https://github.com/kevtr0n/WatsonAssist
。
我当前的堆栈是:
我已经用Postman调用生产环境中的URL,它返回正确的响应。我已经从frontend / Postman调用了开发中的localhost,它返回了正确的响应。但是,当前端调用API时,我在Chrome控制台中收到以下错误:
OPTIONS http://localhost:5000/analyze net::ERR_CONNECTION_REFUSED
tone-analyzer:1 Uncaught (in promise) TypeError: Failed to fetch
我的前端在生产中在Heroku上如何看待后端?
http://localhost:5000
或https://watson-assist.herokuapp.com
我已经测试了两者,但都没有在前端工作。
我调用API的前端POST位于Vuex动作中:
analyze: (context) => {
var url = "https://watson-assist.herokuapp.com/analyze";
var data = { message: context.state.message };
console.log(`Action:\tanalyze:\nEntrance:\t${JSON.stringify(data)}`);
return fetch(url, {
method: 'POST',
body: JSON.stringify(data),
headers: { 'Content-Type': 'application/json' }
}).then(
response => response.json(),
error => console.log(`Action:\tanalyze\nError:\t${error}`)
).then(
res => context.dispatch('updateState', res)
);
}
后端POST:
app.post('/analyze', (req, res) => {
if (!req.body) {
return res.sendStatus(400);
}
var message = req.body.message
var tone_analyzer = new ToneAnalyzerV3({
'iam_apikey': $KEY,
'url': $URL,
'version': $VER
});
var toneParams = {
tone_input: { 'text': message },
content_type: 'application/json'
};
const p = new Promise((resolve, reject) => {
tone_analyzer.tone(toneParams, (error, toneAnalysis) => {
if (error) {
reject(new Error(error));
} else {
resolve(toneAnalysis);
}
});
});
p
.then(result => res.send(result))
.catch(error => console.log('Error', error.message));
})