【发布时间】:2020-01-03 07:51:27
【问题描述】:
我正在尝试使用 lambda 函数连接到 AWS 托管的 SQL 服务器,但是当我在 lambda 管理控制台中或通过 API 调用对其进行测试时,我一直通过该函数以获得最终响应test here
这似乎表明调用没有发生错误并且没有返回任何记录。因为我知道表格有数据,所以我至少会预料到一个错误,或者理想情况下是数据。我该如何解决这个问题?
使用 CloudWatch 控制台输出,我看到“称为 rdsquery”,但在那之后什么也没有
var sql = require("mssql");
// config for your database
var config = {
user: 'xxuser',
password: 'xxxx',
server: 'mydns',
database: 'Antonio'
};
module.exports.rdsquery = async event => {
console.log('called rdsquery')
try{
// connect to your database
await sql.connect(config, function (err) {
console.log('connected')
if (err)
console.log('rdsquery: '+err)
//return {statusCode: 200, headers: {'Access-Control-Allow-Origin': '*'},body: JSON.stringify('sql connect err: '+err)};
// create Request object
var request = new sql.Request();
console.log('rdsquery: request crated')
// query to the database and get the records
request.query('select CustomerNo from FROMMAS_AR_Customer', function (err, recordset) {
if (err)
console.log('rdsquery-sql: '+err)
//return {statusCode: 200, headers: {'Access-Control-Allow-Origin': '*'},body: JSON.stringify('sql err: '+err)};
// send records as a response
console.log('logging recordset')
console.log(recordset);
return {statusCode: 200, headers: {'Access-Control-Allow-Origin': '*'},body: JSON.stringify(recordset)};
//return {statusCode: 200, headers: {'Access-Control-Allow-Origin': '*'},body: JSON.stringify(recordset)};
});
});
}
catch(e)
{
console.log('rdsquery-catch: '+e)
return {statusCode: 200, headers: {'Access-Control-Allow-Origin': '*'},body: JSON.stringify('ERR: '+e)};
}
//return {statusCode: 200, headers: {'Access-Control-Allow-Origin': '*'},body: JSON.stringify('test here')};
};
【问题讨论】:
-
您检查过 AWS cloudwatch 日志吗?您应该控制台错误而不是返回它们以帮助调试
-
@Adiii 我将控制台日志添加到我的代码中,似乎连接从未建立并无形地失败
-
ms 服务器在哪里?是否可以从 lambda 访问?
-
假设
rdsquery是您的处理函数,您是否还需要以某种方式调用Lambda 处理程序的callback? -
是的,经过更多挖掘(当我将
require mssql放入 try catch 时)我得到一个“找不到模块错误”。好像我没有正确地将它加载到 lambda 中
标签: node.js amazon-web-services aws-lambda