簡體   English   中英

無法將 Azure 應用服務中的 NodeJS 應用連接到 Azure MySQL 數據庫

[英]Unable to connect NodeJS app in Azure App Services to Azure MySQL Database

我已將 NodeJS(使用 ExpressJS、Sequelize)部署到 Azure 應用服務。 沒有數據庫連接的簡單 API 可以工作,但是當我使用從 Azure MySQL 數據庫加載數據的應用程序部分時,證書出現問題。 我從應用服務日志 Stream 中收到此日志消息:

Unhandled rejection SequelizeConnectionError: unable to get local issuer certificate

在此處輸入圖像描述

我已按照此處關於如何啟用防火牆和使用證書 (BaltimoreCyberTrustRoot.crt.pem) 的步驟進行操作。

使用相同的指令,從我的筆記本電腦,我可以使用這個 CLI 連接到遠程 Azure MySQL 數據庫:

$ mysql -h <my-db>.mysql.database.azure.com -u <my-user> --ssl-mode=REQUIRED --ssl-ca=.\BaltimoreCyberTrustRoot.crt.pem -p

我已經關注了與此相關的其他 StackOverflow / Github 問題,並且我遵循了他們的配置,如下所示:

const mysql = require('mysql2');
...
var sequelize = new Sequelize(config.db, config.username, config.password, {
    host:    "<my-db>.mysql.database.azure.com",
    port:    3306,
    dialect: 'mysql',
    dialectOptions: {
        ssl: {
            ca: fs.readFileSync(__dirname + "/ssl/BaltimoreCyberTrustRoot.crt.pem")
        }
    }
});

我是否需要在ssl下設置額外的密鑰/證書?

ssl: {
    key: fs.readFileSync(__dirname + "./certs/client-key.pem"),
    cert: fs.readFileSync(__dirname + "./certs/client-cert.pem"),
    ca: fs.readFileSync(__dirname + "/ssl/BaltimoreCyberTrustRoot.crt.pem")
}

我正在使用節點 12(Azure 應用服務中的節點 12.13),這是我的package.json依賴項:

"dependencies": {
    "body-parser": "^1.19.0",
    "express": "^4.17.1",
    "faker": "^4.1.0",
    "mysql2": "^2.1.0",
    "sequelize": "^5.21.5"
}

根據我的測試,我可以連接到 mysql。 您可以添加額外的密鑰/證書是與否。

如果你添加,你可以看到我的代碼,如下所示,

/*configuration*/
const sequelizeInstance  = new Sequelize("***db", "azure_root@***mysql", "Ja***.****20", {
host: "***mysql.mysql.database.azure.com",
dialect: 'mysql',
dialectOptions: {
    ssl: {
        ca: fs.readFileSync(path.resolve(__dirname, 'BaltimoreCyberTrustRoot.crt.pem'));
    }
}
});

/*test connection*/
try
{
    sequelizeInstance.authenticate();
    console.log('Connection has been established successfully.');
} 
catch (error) {
    console.error('Unable to connect to the database:', error);
}

如果沒有,您只需像文檔一樣設置ssl=true

希望它對你有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM