使用axios的UnhandledPromiseRejectionWarning错误

时间:2018-02-20 22:45:20

标签: javascript node.js http axios

我正在设置“UnhandledPromiseRejectionWarning:未处理的承诺拒绝。”错误导致我无法执行上述简单请求:

app.get('/', function (req, res) {
  const GITHUB_AUTH_ACCESSTOKEN_URL = 'https://github.com/login/oauth/access_token'
  const CLIENT_ID = '123'
  const CLIENT_SECRET = '456'


    axios({
        method: 'post',
        url: GITHUB_AUTH_ACCESSTOKEN_URL,
        data: {
          client_id: CLIENT_ID,
          client_secret: CLIENT_SECRET
        }
      })
    .then(function (response) {
      alert('Sucess ' + JSON.stringify(response))
    })
    .catch(function (error) {
      alert('Error ' + JSON.stringify(error))
    })

});

我无法理解为什么会发生这种情况,因为我正在使用“.catch()”方法正确处理错误。如何正确执行此请求?

2 个答案:

答案 0 :(得分:2)

nodeps中本地不存在

警报,因此错误可能来自.catch

尝试使用此代码:

 axios({
        method: 'post',
        url: GITHUB_AUTH_ACCESSTOKEN_URL,
        data: {
          client_id: CLIENT_ID,
          client_secret: CLIENT_SECRET
        }
      })
    .then(function ({data}) {
      console.log('Success ' + JSON.stringify(data))
    })
    .catch(function (error) {
      console.log('Error ' + error.message)
    })

如果你想要更“现代”的方式

// notice the async () =>
app.get('/', async (req, res) => {
    const GITHUB_AUTH_ACCESSTOKEN_URL = 'https://github.com/login/oauth/access_token'
    const CLIENT_ID = '123'
    const CLIENT_SECRET = '456'
    try {
        const { data } = await axios({
            method: 'post',
            url: GITHUB_AUTH_ACCESSTOKEN_URL,
            data: {
                client_id: CLIENT_ID,
                client_secret: CLIENT_SECRET
            }
        })
        console.log(data)
    } catch (err) {
        console.error(err.message)
    }
});

答案 1 :(得分:1)

alert是一个宿主方法,可以在浏览器环境中找到,因此在node.js中不存在。

  1. 首先在.then
  2. 中抛出错误
  3. 陷入catch
  4. 现在在catch
  5. 内再次被抛出
  6. 因为全局承诺拒绝处理程序无法捕获最后一个catch
  7. 要尝试处理这种情况,请分别使用console.logconsole.error更改每个提醒:

    axios({
            method: 'post',
            url: GITHUB_AUTH_ACCESSTOKEN_URL,
            data: {
              client_id: CLIENT_ID,
              client_secret: CLIENT_SECRET
            }
          })
        .then(function (response) {
          console.log('Success ' + JSON.stringify(response))
        })
        .catch(function (error) {
          console.error('Error ' + error.message)
        })