Axios不发送HTTP post请求

时间:2018-03-07 19:32:56

标签: node.js httprequest axios alexa alexa-skills-kit

我在使用axios

的nodejs中的alexa技能中执行http发布请求时遇到问题

我在这个项目之前使用过axios,从来没有遇到过发送CRUD请求的麻烦。

我的请求处理程序如下所示:

const handlers = {

    'LaunchRequest': function () {
      this.emit(':ask', 'What is your emergency?', 'How can I help you' )
    },
    'InjuryHelpIntent': function () {
      const accessToken = this.event.context.System.user.accessToken
      const userId= this.event.context.System.user.userId
      console.log('user id: ', userId)
      getDeviceAddress(this.event)
      .then((address) => {
          const res = sendHelp(address,accessToken)
          console.log(res)
          this.emit(':tell', 'Succes!')
        })
      .catch((error) => {
        console.log('Error message: ',error)
        this.emit(':tell', error)
      })


    },

}

sendHelp(address, token)函数中,我调用了REST服务。

SendHelp.js:

const axios = require('axios')
module.exports = (address, token) => {
    axios.post('https://api-sandbox.safetrek.io/v1/alarms')
    .then(response => {
      console.log(response)
      return response})
    .catch(error => {
      console.log(error)
      return error})

}

与此同时,我试图发布数据,但没有任何工作,甚至没有未经授权的电话,就像你在sendHelp.js看到我绝望的尝试。 由于缺少授权,我希望得到401错误。我的处理程序中的const res应该是一个json对象,而是undefined。它完全跳过了POST请求。

1 个答案:

答案 0 :(得分:0)

您无法从axios.post()之类的异步函数返回值,并希望只是同步接收返回的值。换句话说,这不会起作用:

const res = sendHelp(address,accessToken)

有两个原因。第一个sendHelp()实际上并没有返回任何内容。即使它确实需要返回一个promise,而不是async axios函数的结果。您需要从axios返回承诺,然后在其上调用then()。例如:

const axios = require('axios')
module.exports = (address, token) => {
    // axios.post() returns a promise. Return that promise to the caller
    return axios.post('https://api-sandbox.safetrek.io/v1/alarms')
    .then(response => {
        console.log(response)
        return response
    })
    .catch(error => {
        console.log(error)
        return error
    })
}

现在你可以使用这样的承诺:

getDeviceAddress(this.event)
 .then((address) => sendHelp(address,accessToken))
 .then(res => {
    console.log(res)
    this.emit(':tell', 'Succes!')
  })
 .catch(err => handleError())