遇到一些问题,试图找出一个azure函数(基于node.js)可以连接到我们的mysql数据库(也托管在azure上)。我们使用mysql2和下面的教程非常准确(https://docs.microsoft.com/en-us/azure/mysql/connect-nodejs,以及类似的)以下是通话内容:
const mysql = require('mysql2');
const fs = require('fs');
module.exports = async function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.');
if (req.query.fname || (req.body && req.body.fname)) {
context.log('start');
var config = {
host:process.env['mysql_host'],
user: process.env['mysql_user'],
password: process.env['mysql_password'],
port:3306,
database:'database_name',
ssl:{
ca : fs.readFileSync(__dirname + '\\certs\\cacert.pem')
},
connectTimeout:5000
};
const conn = mysql.createConnection(config);
/*context.log(conn);*/
conn.connect(function (err) {
context.log('here');
if (err) {
context.error('error connecting: ' + err.stack);
context.log("shit is broke");
throw err;
}
console.log("Connection established.");
});
context.log('mid');
conn.query('SELECT 1+1',function(error,results,fields) {
context.log('here');
context.log(error);
context.log(results);
context.log(fields);
});
基本上,遇到了conn.connect(函数(err)。。。不返回任何内容-没有错误消息,没有日志,等等。conn.query的工作原理类似。
一切似乎都安排妥当了,但我甚至不知道下一步该去哪里解决这个问题。以前有没有人遇到过这个问题,或者对如何处理有什么建议?
谢谢!!本
2条答案
按热度按时间r8uurelv1#
我相信baskar共享的链接包括在本地调试您的函数
至于你的功能,你可以做一些改变来提高性能。
在函数代码之外创建到db的连接,否则每次都会创建一个新示例并连接。此外,您还可以启用池以重用连接,并且不超过运行azure函数的沙盒的300限制。
将承诺与async/await一起使用
你基本上可以把你的代码更新成这样
ps:我还没有测试过这段代码,但我相信类似的东西应该可以工作
64jmpszr2#
由于显而易见的原因,在无服务器上进行调试很有挑战性。您可以尝试其中一种黑客解决方案在本地进行调试(如无服务器框架),但如果您的问题是与数据库的连接有关,则这不一定对您有帮助。你可能会在当地看到不同的行为。
另一个选择是查看是否可以使用rookout进行单步调试,这样可以让您在代码执行的不同点捕获完整的堆栈,并让您很好地了解失败的原因和原因。