Javascript 如何将CURL请求转换为axios请求?

Javascript 如何将CURL请求转换为axios请求?,javascript,node.js,aws-lambda,axios,Javascript,Node.js,Aws Lambda,Axios,我刚刚成功地在这里卷曲: curl -X POST https://jenkins-url/job/MyJob/job/some-job/job/master/build --user myemail:mypassword -H 'Jenkins-Crumb: mycrumb' 现在我想在我的lambda中使用axios 所以我有这个: const axios = require('axios') exports.handler = async (event) => { co

我刚刚成功地在这里卷曲:

curl -X POST https://jenkins-url/job/MyJob/job/some-job/job/master/build --user myemail:mypassword -H 'Jenkins-Crumb: mycrumb'
现在我想在我的lambda中使用axios

所以我有这个:

const axios = require('axios')
exports.handler = async (event) => {
      const url = "my-url";
      try {
        const res = await axios.post(url, {}, {
            auth: {
              username: 'user',
              password: 'passowrd'
            },
            headers: {
                "Content-Type": "application/x-www-form-urlencoded",
                "Jenkins-Crumb": "my-crumb"
            },
          }).then(function(response) {
            console.log('Authenticated');
          }).catch(function(error) {
            console.log('Error on Authentication');
          });
        console.log(res)
        return {
            statusCode: 200,
            body: JSON.stringify(res)
        }
    } catch (e) {
        console.log(e)
        return {
            statusCode: 400,
            body: JSON.stringify(e)
        }
    }
};
但当我触发lambda时,它返回:
失败,错误为“请求已完成但不正常”

不确定我是否在某个地方做错了什么,但似乎从CURL到axios的映射都是正确的

您有一些问题:

  • .then(…)
    处理程序中,您正在执行一个控制台日志,但没有从该函数返回任何内容。因此,
    res
    将是
    未定义的
  • 您正在对
    res
    执行一个
    JSON.stringify
    res
    将是axios响应,而不是响应主体。串接axios响应是一个坏主意,因为它包含大量的对象引用和循环引用。您希望
    res.data
    为您提供响应数据
  • Axios返回的错误也可能包含这些重对象和循环引用。根据我的经验,在尝试从axios序列化响应和错误时,实际上可能会使节点崩溃
  • 以下是我如何修改您的函数:

    const axios = require('axios')
    
    exports.handler = async (event) => {
      const url = "my-url";
      try {
        const res = await axios.post(url, {}, {
          auth: {
            username: 'user',
            password: 'passowrd'
          },
          headers: {
            "Content-Type": "application/x-www-form-urlencoded",
            "Jenkins-Crumb": "my-crumb"
          },
        });
    
        return {
          statusCode: 200,
          body: JSON.stringify(res.data)
        }
      } catch (e) {
        console.log(e)
        return {
          statusCode: 400,
          // Don't do JSON.stringify(e). 
          // e.response.data will be the axios response body,
          // but e.response may be undefined if the error isn't an HTTP error
          body: e.stack
        }
      }
    };
    

    如果您将
    。然后
    从您的
    等待中捕获
    续集,会发生什么情况?哪个错误处理程序正在记录该消息?您已经在等待axios调用,让catch处理程序获取错误并报告可能的错误。@Joe仍然没有成功。我已经在本地运行了这个函数,它可以正常工作。我还注释了axios部分并运行了lamba,它工作正常。因此,lambda中出现了一些与axios不一样但毫无意义的情况:/jenkins可能会拒绝ithmm仍然不工作:/cloudwatch logsalso仅供参考,我刚刚从lambda中取出此函数并在本地运行,它的行为符合预期,那么lambda做错了什么:/