无法使用 sequelize 连接到 SQL Azure 数据库,但本地主机上的 SQL 服务器工作正常

Can't connect to SQL Azure Database with sequelize, but SQL Server on localhost works fine

我已经使用 MongoDB 将一些站点部署到 Heroku,但这是我第一次使用 SQL 创建站点并尝试部署到 Azure,所以我可能缺少明显的东西。

我一直在使用 Node.js、SQL 服务器数据库和作为 ORM 的 Sequelize 在我的开发机器上开发一个网站。一切正常,但是当我尝试使用连接字符串部署到 Azure 时,我无法连接到 SQL Azure 数据库。我可以使用 SQL Server Management Studio 连接到 Azure 上的空数据库,所以我确定我的连接信息是正确的。

当我尝试部署到 Azure 时,我尝试使用 Azure 提供的连接字符串:

var Sql = require('sequelize');
var sql = new Sql('Driver={SQL Server Native Client 11.0};Server=tcp:server.database.windows.net,1433;Database=databasename;Uid=UserName@server;Pwd={password};Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;');

当我尝试连接这个字符串时,我得到的错误是:

C:\Users\username\Documents\GitHub\event-site\node_modules\sequelize\lib\sequelize.js:110
    options.dialect = urlParts.protocol.replace(/:$/, '');
                                       ^

TypeError: Cannot read property 'replace' of null
    at new Sequelize (C:\Users\v-mibowe\Documents\GitHub\event-site\node_modules\sequelize\lib\sequelize.js:110:40)
    at Object.<anonymous> (C:\Users\v-mibowe\Documents\GitHub\event-site\routes\db-routes.js:68:11)
    at Module._compile (module.js:435:26)
    at Object.Module._extensions..js (module.js:442:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:311:12)
    at Module.require (module.js:366:17)
    at require (module.js:385:17)
    at Object.<anonymous> (C:\Users\v-mibowe\Documents\GitHub\event-site\server.js:16:1)
    at Module._compile (module.js:435:26)
    at Object.Module._extensions..js (module.js:442:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:311:12)
    at Function.Module.runMain (module.js:467:10)
    at startup (node.js:136:18)
    at node.js:963:3

db-routes.js:68:11 是数据库的连接字符串。

当我尝试使用以下配置我的连接时,服务器不再崩溃或给出错误,但创建了 none 应该由架构中的代码创建的内容。该代码如下所示:

var Sql = require('sequelize');
var sql = new Sql('dbname', 'UserName@server', 'password', {
  host: 'server.database.windows.net',
  dialect: 'mssql',
  driver: 'tedious',
  options: {
    encrypt: true,
    database: 'dbname'
  },
  port: 1433,
  pool: {
    max: 5,
    min: 0,
    idle: 10000
  }
});

我与本地主机的原始连接(工作正常)如下所示:

var Sql = require('sequelize');
var sql = new Sql('dbname', 'username', 'password', {
  host: 'localhost',
  dialect: 'mssql',

  pool: {
    max: 5,
    min: 0,
    idle: 10000
  }
})

在此先感谢您的帮助!

您需要启用 SQL Azure 防火墙才能向其添加 Azure 服务。不是你的应用程序将无法与 SQL Azure 通信,

要连接到 Azure Sql 服务器 运行 很乏味,我们需要在连接工厂中设置附加选项:encrypt: true。 在Sequelize中,我们可以在初始化函数中指定dialectOption:

var Sequelize = require('sequelize');
var sequelize = new Sequelize('dbname', 'username', 'passwd', {
  host: 'hostname',
  dialect: 'mssql',
  pool: {
    max: 5,
    min: 0,
    idle: 10000
  },
  dialectOptions: {
    encrypt: true
  }
});

您可以在 GitHub

上参考 Sequelize 问题回购中的 similar issue