![](/img/trans.png)
[英]Connecting to MySql database from AWS Lambda function using Node.js, no connect callback
[英]How to debug an Azure Function using Node.js and mysql2 connecting to database
嘗試找出 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 的工作方式類似。
一切似乎都設置正確,但我什至不知道下一步該去哪里解決問題。 有沒有人以前遇到過這種情況或對如何處理有建議?
謝謝!! 本
我相信 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:我還沒有測試過這段代碼,但我相信這樣的事情應該可以工作
由於顯而易見的原因,在無服務器上進行調試具有挑戰性。 您可以嘗試使用一種 hacky 解決方案在本地進行調試(如Serverless Framework ),但如果您的問題與數據庫連接有關,這不一定對您有幫助。 您可能會在本地看到不同的行為。
另一種選擇是查看您是否可以使用Rookout進行單步調試,這應該可以讓您在代碼執行的不同點捕獲完整堆棧,並讓您很好地了解失敗的原因和原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.