无法在 Netlify Lambda 函数中 return mysql db 查询结果
Can't return mysql db query results in Netlify Lambda function
我正在处理 a netlify demo project repo 我添加了一个新的 lambda 函数 mytest.js
。
在 mytest
中,我正在连接到 mysql 数据库并尝试 return 查询结果。
const mysql = require('mysql')
const pool = mysql.createPool({ ...config data... })
exports.handler = (event, context, callback) => {
context.callbackWaitsForEmptyEventLoop = false
try {
pool.getConnection(function(err, connection) {
connection.query('SELECT * FROM mytable order by DatePublished desc', function(error, results, fields) {
connection.release()
if (error) {
console.log('calling callback with error')
callback(error);
}
else {
console.log(`calling callback with results`)
console.log(results);
callback(null, {
statusCode: 200,
body: results
})
}
})
})
}
catch (e) {
console.log('errored in try catch')
console.log(e)
}
}
当我部署它并点击 url 时,我可以看到对数据库的查询成功并且我看到结果已注销(在 netlify web ui 日志中)但是 returning 数据总是导致 502。
我在邮递员中尝试了同样的事情,但在 body 中没有得到任何回报。
当我对 body: 'test string'
进行硬编码时,它会 return "test string" 正确,所以我知道该功能在其他情况下可以正常工作,所以我真的很困惑为什么结果在记录时可用但不在回调中。
日志中的 results
是一个包含 208 个非常简单 objects 的数组,其中包含大约 7 个属性,每个属性都是小数据,例如 int 和 url 字符串
如有任何帮助,我们将不胜感激。
接受答案后的更新代码 - 还添加了 CORS headers 因为后来出现了
callback(null, {
statusCode: 200,
headers: {
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/json'
},
body: JSON.stringify(results)
})
尝试在结果上使用 JSON.stringify,正文应该是一个字符串。
我正在处理 a netlify demo project repo 我添加了一个新的 lambda 函数 mytest.js
。
在 mytest
中,我正在连接到 mysql 数据库并尝试 return 查询结果。
const mysql = require('mysql')
const pool = mysql.createPool({ ...config data... })
exports.handler = (event, context, callback) => {
context.callbackWaitsForEmptyEventLoop = false
try {
pool.getConnection(function(err, connection) {
connection.query('SELECT * FROM mytable order by DatePublished desc', function(error, results, fields) {
connection.release()
if (error) {
console.log('calling callback with error')
callback(error);
}
else {
console.log(`calling callback with results`)
console.log(results);
callback(null, {
statusCode: 200,
body: results
})
}
})
})
}
catch (e) {
console.log('errored in try catch')
console.log(e)
}
}
当我部署它并点击 url 时,我可以看到对数据库的查询成功并且我看到结果已注销(在 netlify web ui 日志中)但是 returning 数据总是导致 502。
我在邮递员中尝试了同样的事情,但在 body 中没有得到任何回报。
当我对 body: 'test string'
进行硬编码时,它会 return "test string" 正确,所以我知道该功能在其他情况下可以正常工作,所以我真的很困惑为什么结果在记录时可用但不在回调中。
results
是一个包含 208 个非常简单 objects 的数组,其中包含大约 7 个属性,每个属性都是小数据,例如 int 和 url 字符串
如有任何帮助,我们将不胜感激。
接受答案后的更新代码 - 还添加了 CORS headers 因为后来出现了
callback(null, {
statusCode: 200,
headers: {
'Access-Control-Allow-Origin': '*',
'Content-Type': 'application/json'
},
body: JSON.stringify(results)
})
尝试在结果上使用 JSON.stringify,正文应该是一个字符串。