Azure База данных для MySQL - webapp nodejs - PullRequest
1 голос
/ 16 июня 2020

Итак, я работал над веб-приложением с локальной mysql рабочей средой. Недавно я переместил базу данных в Azure База данных для MySQL. Все работало нормально, пока я не переехал из местного. Все мои веб-страницы работали правильно, теперь работают только 2 из 4 страниц, и я сталкиваюсь с указанной ниже ошибкой, когда нажимаю на битые страницы. Ниже показано, как я подключаюсь к базе данных, я не уверен, работает ли второе подключение.

Нужно ли мне делать что-то подобное? https://docs.microsoft.com/en-us/azure/mysql/howto-configure-ssl

Спасибо за любую помощь!

var connection = mysql.createConnection({
       host: 'host',
       user: 'user',
       password: "password",
       database: 'schema_1',
       ssl: true
    });
var connection = mysql.createConnection({
       host: 'host',
       user: 'user',
       password: "password",
       database: 'schema_2',
       ssl: true
    });

enter image description here enter image description here enter image description here enter image description here

EDIT HERE ------------------------

table_routes.js

var express = require('express')
     , http = require('http')
     , mysql = require('mysql'); // 

table_routes2.js

var express = require('express')
     , http = require('http')
     , mysql = require('mysql'); // 

введите описание изображения здесь

1 Ответ

1 голос
/ 17 июня 2020

Новые

Я предлагаю вам использовать sequelize для подключения нескольких баз данных. Только нужно настроить базу в config. js. Не так, как вы использовали 7003 и 7004 для определения нескольких баз данных.

Мой пример кода демонстрирует соединение двух баз данных в mysql и sqlsever. На следующем рисунке показан результат операции. Это просто демонстрационный код, если вы хотите использовать его в своем проекте, вам нужно его изучить.

enter image description here

The structure of my demo directory is as follows.

введите описание изображения здесь

конфиг. js

const fs = require('fs');
const path = require('path');

module.exports = {

/**Declaration of databases for my development environment**/
  "development": {
      "databases": {
          "dbinmysql": {
              "database": "mysql", //you should always save these values in environment variables
              "username": "***@p***mysql",  //only for testing purposes you can also define the values here
              "password":  "Ja***",
              "host": "*****mysql.mysql.database.azure.com",
              "port": 3306,
              "ssl":true,
              "dialect": "mysql",  //here you need to define the dialect of your databse, in my case it is Postgres
              "dialectOptions": {
                ssl: {
                    ca: fs.readFileSync(path.resolve(__dirname, 'BaltimoreCyberTrustRoot.crt.pem'))
                  }
              },
          },
          "dbinsqlserver": {
              "database": "pa*****db", 
              "username": "pa***i",  
              "password":  "J*****0",
              "host": "***sqlserver.database.windows.net",
              "port": 1433,
              "dialect": "mssql",  //second database can have a different dialect
              "dialectOptions": {
                options: {
                    encrypt: true,
                }
            }
          },
      },
  }
  }

тест. js

const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const { QueryTypes } = require('sequelize');

//Load the configuration from the config.js
const config = require(`./config.js`)[env];

//Create an empty object which can store our databases
const db = {};

//Extract the database information into an array
const databases = Object.keys(config.databases);

//Loop over the array and create a new Sequelize instance for every database from config.js
for(let i = 0; i < databases.length; ++i) {
    let database = databases[i];
    let dbPath = config.databases[database];
    console.log("try to connecting "+database);
    //Store the database connection in our db object
    db[database] = new Sequelize( dbPath.database, dbPath.username, dbPath.password, dbPath );
    if (database == 'dbinmysql') {
        const results = db[database].query("SELECT *FROM USER", { type: QueryTypes.SELECT })
    } else if (database == 'dbinsqlserver') {
        const results = db[database].query("SELECT *FROM TEST", { type: QueryTypes.SELECT })
   }
}

PRIVIOUS

Я думаю, что причина root в том, что когда вы публикуете sh свое веб-приложение на azure, есть только один порт, который table_routes_1and2.js наконец слушает, http_80 и https_443 , должен быть только один db, который, наконец, вступит в силу, это должна быть причина root.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...