Обработка ошибок из асинхронного ожидания синтаксиса с помощью Axios - PullRequest
0 голосов
/ 26 сентября 2018

Вот мой кусок кода:

  const getToken = async () => {
    try {
      const token = await axios.post(keys.sessionURL, {
        email: keys.verificationEmail,
        password: keys.verificationPassword,
      });
    } catch (err) {
      throw new Error('Unable to establish a login session.'); // here I'd like to send the error to the user instead
    }
  };

Итак, как вы можете видеть, я подключаюсь к внешнему серверу, чтобы получить токен.И это работает.Теперь я хотел бы поймать ошибку, но на этот раз не с помощью команды «выбросить новую ошибку», но я бы хотел отправить ее пользователю, поэтому вместо этого я хотел бы получить что-то вроде этого:

res.status(401).send('Unable to get a token');

Но поскольку я не нахожусь в обработчике маршрута, я не могу использовать 'res'.Как я могу отправить его пользователю тогда?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Вы можете сохранить почти ту же функцию

const getToken = async () => {
  try {
    const token = await axios.post(keys.sessionURL, {
      email: keys.verificationEmail,
      password: keys.verificationPassword,
    })
  } catch (err) {
    throw new Error('Unable to get a token.')
  }
}

Тогда из вашего обработчика маршрута просто перехватите возможное исключение

app.get('/endpoint', async (req, res) => {
  try {
    const token = await getToken()

    // Do your stuff with the token
    // ...

  } catch (err) {
     // Error handling here
     return res.status(401).send(err.message);
  }
})

Система исключений js по умолчанию хорошо работает для передачи данных об ошибкахчерез стек вызовов.

0 голосов
/ 26 сентября 2018

вы сохраняете флаг, подобный isAuthError, и, если происходит ошибка, отправляете его как true и в основную функцию, если флаг isAuthError равен true, выдает ошибку и обрабатывает catch, в противном случае выполняйте ваши операции.Я добавил пример ниже.надеюсь, это поможет

const getToken = async () => {
    try {
      const token = await axios.post(keys.sessionURL, {
        email: keys.verificationEmail,
        password: keys.verificationPassword,
      });
      return {token, isAuthError: false};
    } catch (err) {
      // throw new Error('Unable to establish a login session.'); // here I'd like to send the error to the user instead
      return {err, isAuthError: true};
    }
  };

mainFunction

app.post('/login', async (req, res)=>{
  try{
    // some validations

    let data = await getToken();
    if( data.isAuthError){
      throw data.err;
    }
    let token = data.token;
    //do further required operations
  }catch(err){
     //handle your error here with whatever status you need
     return res.status(500).send(err);
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...