繁体   English   中英

内部服务器错误 aws lambda 函数 nodejs

[英]Internal server error aws lambda function nodejs

我正在使用 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 

};

result显然不在response范围内,因此这将导致典型的undefined错误。

解决方案是处理axios.get回调中的逻辑,试试这个:

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 的监视器选项卡中获取错误详细信息。 我来宾你会得到一个错误,比如在return response行中response is undefined return response

使用您的代码,当您调用该函数时,将立即执行return response行,但response并未在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}),
    }
  }
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM