Axios возвращает неопределенное в отдельной функции - PullRequest
0 голосов
/ 31 октября 2019

Доброе утро всем! У меня проблемы с получением ответа от другой функции. В частности, я обращаюсь к службе, созданной на другом веб-сайте, и возвращаю имя базы данных. В настоящее время, когда я вызываю api напрямую с его заголовками на Postman, он работает и так же, когда это делается внутри функции getDbName (), которую я создал с помощью axios, однако, когда я пытаюсь вернуть этот ответ в другой, он выводит «неопределенное». ». Насколько я понимаю, до тех пор, пока используются функции стрелок response =>, вызов будет ожидать ответа должным образом. Я ошибаюсь в этом предположении?

Я пробовал много разных попыток возврата переменной. Я исследовал использование множества ссылок на SO ниже, но все еще не мог заставить его работать:

Обещание axios возвращает правильное значение в функции "axios.all", но не определено в "then"function

Axios печатает значение на консоли, но возвращает неопределенный

GET-запрос с возвращением axios неопределенного

[dbController.js]
import axios from 'axios';
import apiconfig from '../config/apiconfig';

function getDbName() {
  return axios({
    method: 'GET',
    url: `${apiconfig.cb_url}/api/DbToBeWorked`,
    headers: apiconfig.optionsHeaders,
  }).then(dbn => {
    console.log(dbn.data.db); //logs database name correctly
    return dbn.data.db;
  });
};

[routes.js]
import { Router } from 'express';

const routes = new Router();

routes.get('/api/test', (req, res) => {
  getDbName().then(dbn => {
    console.log(dbn) //this logs 'undefined'
    return res.status(200).json(dbn);
  });
});

Вывод должен быть dbn (имя базы данных) для обоих console.logs. В настоящий момент одно возвращает правильное имя, а другое возвращает неопределенное.

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Я идиот и забыл экспортировать getDbName, чтобы маршруты могли его прочитать. Я импортировал его, но не экспортировал из [controller.js]. Код, который я разместил, работает нормально.

0 голосов
/ 31 октября 2019
const getDbName = function () {
 return new Promise((resolve, reject) => {
    axios({
        ///----
    })
        .then(response => {
            resolve({
                // Do something 
            })
        })
        .catch(err => {
            reject({
                // Do something
            })
        })
  })

}

routes.get('/api/test', async(req, res) => {
 try{
  await getDbName()
 }catch(error)
  /// error

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...