Невозможно отобразить пользовательское сообщение об ошибке express res.send () на стороне vue - PullRequest
1 голос
/ 22 апреля 2020

У меня есть приложение nuxt с express и mySQL.

Проблема : я не могу отобразить пользовательское сообщение об ошибке express res.send () на vue side

Давайте представим, что я хочу отобразить информацию об одном пользователе.

Вот мой внутренний код:

// Find a single User with a userId
exports.findOne = (req, res) => {
  User.findById(req.params.userId, (err, data) => {
    if (err) {
      if (err.kind === 'not_found') {
        res.status(404).send({
          message: `Not found User with id ${req.params.userId}.`
        })
      } else {
        res.status(500).send({
          message: 'Error retrieving User with id ' + req.params.userId
        })
      }
    } else { res.send(data) }
  })
}

А вот Vue part

<script>
import axios from 'axios'
import appNavbar from '~/components/appNavbar.vue'

export default {
  components: {
    appNavbar
  },
  data () {
    return {
      userId: '',
      userData: '',
      errorMsg: ''
    }
  },
  methods: {
    fetchUser (evt) {
      evt.preventDefault()
      return axios.get('/api/users/' + this.userId)
        .then((res) => {
          this.userData = res.data
        })
        .catch((err) => {
          this.errorMsg = err.toJSON()
        })
    }
  }
}
</script>

Когда я даю идентификатор несуществующего пользователя, я хочу иметь возможность получить собственное сообщение об ошибке, написанное сзади, и отобразить его спереди

НО я получаю только это JSON

{ "message": "Request failed with status code 404", "name": "Error" }

У кого-нибудь есть подсказка? Спасибо!

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

РЕДАКТИРОВАТЬ: НАЙДЕНО РЕШЕНИЯ

Ответ найден здесь: https://github.com/axios/axios/issues/960#issuecomment -309287911

В части vue улов должен вернуть err.response, а не только err. Таким образом, чтобы отобразить ваше собственное сообщение об ошибке, оно должно выглядеть следующим образом:

.catch((err) => {
          this.errorMsg = err.response

0 голосов
/ 22 апреля 2020

Эта ошибка может возникать, потому что вы не устанавливаете хост при вызове API в строке:

return axios.get('/api/users/' + this.userId)

404 ошибка в том, что браузер не нашел эту конечную точку. В этом случае я рекомендую вам попытаться вызвать эту конечную точку в другом инструменте (например, Postman) и убедиться, что ваш API отвечает правильно. После этого исправьте ваш звонок на конечную точку, возможно, он будет выглядеть примерно так, как показано ниже, и повторите попытку:

return axios.get(`${your host here}/api/users/ + ${this.userId}`)
...