Node + Express API не работает в производстве - PullRequest
0 голосов
/ 29 ноября 2018

Я занимаюсь разработкой приложения для веб-приложений с бэкэндом, который выполняет вызовы веб-службы Tone Analyzer IBM Watson.Моя заявка подается на Heroku.URL-адрес приложения: https://watson-assist.herokuapp.com и URL-адрес Github: https://github.com/kevtr0n/WatsonAssist.

Мой текущий стек:

  1. Vue JS Frontend (шаблон, созданный Vue CLI 3)
  2. Express Backend
  3. 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));
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...