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

我已经用MongoDB部署了Heroku的几个站点,但是这是我第一次使用SQL创build站点并尝试部署到Azure,所以我可能会丢失一些明显的东西。

我一直在使用Node.js(SQL Server数据库)和Sequelize(作为ORM)开发我的开发机器上的网站。 一切工作正常,但是当我试图部署到连接string的Azure我无法连接到SQL Azure数据库。 我可以使用SQL Server Management Studio连接到Azure上的空数据库,所以我确定我的连接信息是正确的。

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

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;'); 

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

 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是到数据库的连接string。

当我尝试使用以下方法configuration连接时,服务器不再崩溃或发生错误,但是架构中的代码不应该创build任何应该创build的内容。 该代码如下所示:

 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 } }) 

在此先感谢所有的帮助!

为了连接到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的问题回购中的类似问题

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