как использовать asyn c await на javascript интерфейсе для получения данных от asyn c await node.js backend - PullRequest
0 голосов
/ 25 февраля 2020

Чтобы избежать проблем с несколькими источниками, у меня есть внешний интерфейс javascript, который запрашивает внутренний сервер node.js, который получает данные из API другого источника:

const API_URL = [SOME_OTHER_SERVER];
const API_TIMEOUT = 1000;
const API_TOKEN = [SOME_TOKEN]
const app = express();
const PORT = 3001;
app.use(cors());

app.get('/getBackendData', async(req, res)=> {
  try {
    const response = await axios.get(API_URL,{
      timeout: API_TIMEOUT,
      headers: {
        'Authorization': `Token ${API_TOKEN}`,
        'Access-Control-Allow-Origin': '*'
      }
    });
    console.log(response.data.data); //this works to retrieve and log the data
    return response.data.data; //I want this to return the data to the front end
  } catch (error) {
    console.error(error);
    return error;
  }
});

app.listen(PORT, function() {
  console.log('backend listening on port %s.', PORT);
});

На внешнем интерфейсе я запрашиваю мой node.js бэкэнд:

const BACKEND_API_URL = 'http://localhost:3001/getBackendData';

async function getData() 
{
  let response = await fetch(BACKEND_API_URL, {
    headers: {
      'Access-Control-Allow-Origin': '*',
      'Content-Type': 'application/json',
    }
  });
  let data = await response;
  return data;
}

getData()
  .then(data => console.log(data));  //does not log the data from the backend

Что я делаю не так, что не могу получить ответ от моего node.js бэкэнда на внешнем интерфейсе?

1 Ответ

0 голосов
/ 25 февраля 2020

Вы не можете использовать return на маршруте express. используйте вместо этого res объект, подобный этому: res.send(response.data.data)

см .: https://expressjs.com/pt-br/api.html#res

...