Ожидающий вызов с использованием axios на экспресс

Я пытаюсь сделать очень простой вызов API, используя axios с экспрессом, и понятия не имею, почему он всегда находится в ожидании в браузере.

это мой маршрут

var express = require("express");
var router = express.Router();
const controller = require("../../controllers/issues.controller");
/* GET ALL ISSUES */
router
  .route('/')
  .get(controller.getAllIssues);

это мой контроллер

var axios = require("axios");
const url = "https://redmine-mock-api.herokuapp.com/api/v1/issues?after=2019-04-13T12:00";


exports.getAllIssues = () => {
  const res = axios.get(url)
    .then(res => console.info(res.data))
    .catch(err => console.info("Axios err: ", err));
}

Это приложение.js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./src/api/routes/v1/index');
var usersRouter = require('./src/api/routes/v1/users');
var issuesRouter = require('./src/api/routes/v1/issues');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({
  extended: false
}));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/v1/users', usersRouter);
app.use('/v1/issues', issuesRouter);

// catch 404 and forward to error handler
app.use(function (req, res, next) {
  next(createError(404));
});

// error handler
app.use(function (err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

В браузере он всегда находится в ожидании, и я уже пытаюсь с .then ожидать/асинхронно и понятия не имею, что я делаю неправильно. Когда у меня был маршрут и контроллер в одном файле, он работал. У кого-нибудь есть совет, пожалуйста?

getAllIssues должен принимать два параметра request и response, как только вы закончите с получением своих задач, прикрепите его к response объекту и response.send() к клиенту.
The Reason 29.05.2019 11:28

Большое вам спасибо!` ``` exports.getAllIssues = async (req, res) => { try { const { data } = await axios.get (url) res.json (data) } catch (err) { console. error('Ошибка Axios:', err) } } ``` выглядит так и работает!

FCorreia 29.05.2019 12:12
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
612
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Думаю проблема в контроллере. Поскольку вы никогда не запускаете функцию переменной res (просто определяете ее), ничего не происходит, и поскольку ответ не отправляется обратно... он зависает.

exports.getAllIssues = (req, res) => {
  axios.get(url)
    .then(axRes => {
        console.info(axRes.data)
        // this below line is what closes the loop on waiting for the controller
        res.json(axRes.data);
    })
    .catch(res.json);
}

Асинхронный подход выглядел бы очень похоже

exports.getAllIssues = async (req, res) => {
   try {
      const axRes = await axios.get(url);
      res.json(axRes.data);
   } catch(err) {
      res.send(err);
   }
}

Вы можете прочитать о различных экспресс-методах res.send и т. д. здесь http://expressjs.com/en/api.html#res.json

Вот и все! Большое спасибо! обновлено для асинхронного/ожидающего использования. Спасибо!

FCorreia 29.05.2019 12:13

классно! если у вас есть секунда, чтобы отметить ответ как правильный, я был бы признателен

Katherine R 29.05.2019 12:14

Другие вопросы по теме