Javascript 内部服务器错误aws lambda函数节点JS

Javascript 内部服务器错误aws lambda函数节点JS,javascript,node.js,express,aws-lambda,aws-api-gateway,Javascript,Node.js,Express,Aws Lambda,Aws Api Gateway,我正在尝试使用Axios和Cheerio使用AWS lambda函数进行演示,在以{message:Internal Server Error}的形式调用端点后,我得到了响应 exports.lambdaHandler = async (event, context) => { try { const axios = require('axios'); const cheerio = require('cheerio'); axios

我正在尝试使用Axios和Cheerio使用AWS lambda函数进行演示,在以{message:Internal Server Error}的形式调用端点后,我得到了响应

exports.lambdaHandler = async (event, context) => {
    try {

       const axios = require('axios');
       const cheerio = require('cheerio');
         axios.get('https://www.kitco.com').then((response) => {
            const html = response.data;
            const $ = cheerio.load(html);
            const ask = $('#AU-ask').text();
            const bid = $('#AU-bid').text();
            const resbid = bid.slice(0,7);
            const resask = ask.slice(0,7);
            const result = {
                "ask": resask,
                "bid": resbid
            }
            return result;

        }); 
        response = {
            'statusCode': 200,
            'body': result
        }
    } catch (err) {
        console.log(err);
        return err;
    }

    return response 

};

结果
显然不在
响应
范围内,因此这将导致典型的
未定义
错误

解决方案是处理axios内部的逻辑。获取callback,尝试以下操作:

const axios = require('axios');
const cheerio = require('cheerio');

exports.lambdaHandler = (event, context) => {
  axios.get('https://www.kitco.com')
    .then((response) => {
      const html = response.data;
      const $ = cheerio.load(html);
      const ask = $('#AU-ask').text();
      const bid = $('#AU-bid').text();
      const resbid = bid.slice(0, 7);
      const resask = ask.slice(0, 7);

      const result = {
        statusCode: 200,
        body: {
          ask: resask,
          bid: resbid
        }
      };

      console.log(result);
    })
    .catch(err => {
      console.log(err);
    });
};

结果
显然不在
响应
范围内,因此这将导致典型的
未定义
错误

解决方案是处理axios内部的逻辑。获取callback,尝试以下操作:

const axios = require('axios');
const cheerio = require('cheerio');

exports.lambdaHandler = (event, context) => {
  axios.get('https://www.kitco.com')
    .then((response) => {
      const html = response.data;
      const $ = cheerio.load(html);
      const ask = $('#AU-ask').text();
      const bid = $('#AU-bid').text();
      const resbid = bid.slice(0, 7);
      const resask = ask.slice(0, 7);

      const result = {
        statusCode: 200,
        body: {
          ask: resask,
          bid: resbid
        }
      };

      console.log(result);
    })
    .catch(err => {
      console.log(err);
    });
};

您可以在Lambda控制台web的监视器选项卡中获取错误详细信息。我建议您在
返回响应
行中返回一个错误,如
响应未定义

对于您的代码,调用函数时,
返回响应
行将立即执行,但
响应
未在
lambdaHandler
范围中定义

我建议不要将
async/await
语法与Promise语法(.then.catch)混用,只使用其中一种,我建议使用
async/await
语法

该功能将类似于:

exports.lambdaHandler = async (event, context) => {
  try {
    const axios = require('axios');
    const cheerio = require('cheerio');
    const response = await axios.get('https://www.kitco.com'); // wait until we get the response

    const html = response.data;
    const $ = cheerio.load(html);
    const ask = $('#AU-ask').text();
    const bid = $('#AU-bid').text();
    const resbid = bid.slice(0, 7);
    const resask = ask.slice(0, 7);

    const result = {
      "ask": resask,
      "bid": resbid
    }

    return {
      statusCode: 200,
      body: JSON.stringify(result), // If you working with lambda-proxy-integrations, the `body` must be a string
    }; // return to response the request
  } catch (err) {
    console.log(err);
    return {
      statusCode: 500, // Example, http status will be 500 when you got an exception
      body: JSON.stringify({error: err}),
    }
  }
};

您可以在Lambda控制台web的监视器选项卡中获取错误详细信息。我建议您在
返回响应
行中返回一个错误,如
响应未定义

对于您的代码,调用函数时,
返回响应
行将立即执行,但
响应
未在
lambdaHandler
范围中定义

我建议不要将
async/await
语法与Promise语法(.then.catch)混用,只使用其中一种,我建议使用
async/await
语法

该功能将类似于:

exports.lambdaHandler = async (event, context) => {
  try {
    const axios = require('axios');
    const cheerio = require('cheerio');
    const response = await axios.get('https://www.kitco.com'); // wait until we get the response

    const html = response.data;
    const $ = cheerio.load(html);
    const ask = $('#AU-ask').text();
    const bid = $('#AU-bid').text();
    const resbid = bid.slice(0, 7);
    const resask = ask.slice(0, 7);

    const result = {
      "ask": resask,
      "bid": resbid
    }

    return {
      statusCode: 200,
      body: JSON.stringify(result), // If you working with lambda-proxy-integrations, the `body` must be a string
    }; // return to response the request
  } catch (err) {
    console.log(err);
    return {
      statusCode: 500, // Example, http status will be 500 when you got an exception
      body: JSON.stringify({error: err}),
    }
  }
};

正在调用处理程序吗?调用处理程序
处理程序
。您能否提供有关错误的更多说明?是的,内部服务器的错误是在浏览器中单击API网关端点链接后发生的,该链接反过来调用handler Call you handler
handler
遵守API非常重要。让我知道它是否有效。刚刚尝试过,同样的问题,响应是{message:internalserver Error}正在调用处理程序吗?调用处理程序
处理程序
。您能否提供有关错误的更多说明?是的,内部服务器的错误是在浏览器中单击API网关端点链接后发生的,该链接反过来调用handler Call you handler
handler
遵守API非常重要。让我知道它是否有效。刚刚尝试过,同样的问题,响应是{message:internalserver Error}