Node + Express API在生产中不起作用

时间:2018-11-29 16:56:38

标签: node.js api express heroku vue.js

我正在开发一个带有后端的Web应用程序应用程序,该后端可以调用IBM Watson的Tone Analyzer Web服务。我的应用程序正在Heroku上提供。应用程序URL:https://watson-assist.herokuapp.com和Github URL:https://github.com/kevtr0n/WatsonAssist

我当前的堆栈是:

  1. Vue JS前端(Vue CLI 3生成的模板)
  2. 快速后端
  3. 节点运行时

我已经用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:5000https://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));
})

0 个答案:

没有答案