遇到一些问题,试图找出一个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(function(err)...不返回任何内容的问题-没有错误消息,没有日志等。conn.query的工作原理类似。
一切似乎都设置正确,但是我什至不知道下一步该怎么解决。有没有人遇到过这个问题或对如何处理有任何建议?
谢谢!! 本
答案 0 :(得分:1)
我相信Baskar共享的链接涵盖了在本地调试功能
对于功能,您可以进行一些更改以提高性能。
您基本上可以将代码更新为类似的内容
const mysql = require('mysql2/promise');
const fs = require('fs');
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,
connectionLimit: 250,
queueLimit: 0
};
const pool = mysql.createPool(config);
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');
const conn = await pool.getConnection();
context.log('mid');
await conn.query('SELECT 1+1', function(error, results, fields) {
context.log('here');
context.log(error);
context.log(results);
context.log(fields);
});
conn.release();
}
};
PS:我没有像这样测试这段代码,但我相信类似的东西应该可以工作
答案 1 :(得分:1)
由于显而易见的原因,在无服务器上进行调试具有挑战性。您可以尝试使用一种hacky解决方案在本地进行调试(例如Serverless Framework),但是如果您的问题是与数据库的连接有关,那并不一定会对您有帮助。您可能会在本地看到不同的行为。
另一种选择是查看是否可以使用Rookout进行逐步调试,这应该使您可以在代码执行的不同点捕获整个堆栈,并使您对失败的原因有一个很好的了解。