Javascript 内部服务器错误aws lambda函数节点JS
我正在尝试使用Axios和Cheerio使用AWS lambda函数进行演示,在以{message:Internal Server Error}的形式调用端点后,我得到了响应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
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 handlerhandler
遵守API非常重要。让我知道它是否有效。刚刚尝试过,同样的问题,响应是{message:internalserver Error}正在调用处理程序吗?调用处理程序处理程序。您能否提供有关错误的更多说明?是的,内部服务器的错误是在浏览器中单击API网关端点链接后发生的,该链接反过来调用handler Call you handlerhandler
遵守API非常重要。让我知道它是否有效。刚刚尝试过,同样的问题,响应是{message:internalserver Error}