Я занимаюсь разработкой приложения для веб-приложений с бэкэндом, который выполняет вызовы веб-службы Tone Analyzer IBM Watson.Моя заявка подается на Heroku.URL-адрес приложения: https://watson-assist.herokuapp.com
и URL-адрес Github: https://github.com/kevtr0n/WatsonAssist
.
Мой текущий стек:
- Vue JS Frontend (шаблон, созданный Vue CLI 3)
- Express Backend
- Node Runtime
Я использовал Postman для выполнения вызовов URL-адреса в процессе работы, и он возвращает правильный ответ.Я сделал вызов локальному хосту в разработке из frontend / Postman, и он возвращает правильные ответы.Однако, когда веб-интерфейс вызывает 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
Я протестировал оба, и ни один из них не работает на веб-интерфейсе.
Мой POST внешнего интерфейса, который вызывает API, заключается в действии 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));
})