我在使用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请求。
答案 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())