【发布时间】:2017-06-28 21:20:04
【问题描述】:
我正在使用 Azure SQL DB(MS SQL Server 的云版本)开发一个 Node.js-Express-EJS Web 应用程序。
我首先尝试使用 SQL Server Management Studio 在远程 Azure SQL DB 上测试我的连接。首先,我将我的机器 IP 设置为在 Azure SQL DB 防火墙规则中允许。然后我就可以进入数据库,创建和填充表,并使用 Management Studio 进行查询。
现在,我首先在本地拥有 Node.js 应用程序。但是,它似乎无法使用相同的凭据连接到远程 Azure SQL DB。
首先,我使用node-mssql中的教程:
/* Using node-mssql */
var sql = require('mssql');
router.get('/test/mssql', function(req, res, next) {
console.log('Testing node-mssql')
sql.connect("mssql://<username>:<password>@<server>.database.windows.net/<db>")
.then(function() {
new sql.Request()
.query('SELECT * FROM mytable')
.then(function(recordset) {
console.dir(recordset);
}).catch(function(err) {
console.log(err);
});
}).catch(function(err) {
console.log(err);
});
});
我只能从控制台获取
'Testing node-mssql'
GET /contact/test/mssql - - ms - -
但是没有响应,似乎一直在等待,甚至没有抛出错误。
当我使用 Sequelize.js 时也会发生同样的事情
/* Using Sequelize.js */
var Sequelize = require('sequelize');
var sequelize = new Sequelize('<db>', '<username>', '<password>', {
host: '<mydb>.database.windows.net',
dialect: 'mssql',
pool: {
max: 5,
min: 0,
idle: 10000
},
});
router.get('/test/sequelize', function(req, res, next) {
console.log('Testing sequelize');
sequelize.authenticate()
.then(function(err) {
console.log('Connection has been established successfully');
})
.catch(function(err) {
console.log('Unable to connect to the database:', err);
});
});
结果:
Testing sequelize
GET /test/sequelize - - ms - -
这是我正在使用的版本:
Node.js - 4.6.0
express - 4.14.0
mssql - 3.3.0
sequelize - 3.30.2
tedious - 1.14.0
(我想知道这是否与我使用 WiFi 连接有关?但不可能,因为 Management Studio 工作正常,对吧?)
【问题讨论】:
-
首先要检查 SQL Azure 和连接问题是防火墙是否对客户端的 IP 地址开放。
-
@MikeS 这就是我所做的。我的 Management Studio 与 Azure SQL DB 的连接正常。在我启动 Node.js 应用程序的同一台机器上。
-
您是否尝试在代码中提供端口号?
-
另外,看看同样的代码能否连接到本地的Sql server实例。
-
@MikeS 当我将端口 1433 提供给连接字符串或配置时,也会发生同样的情况。
标签: node.js azure express azure-sql-database sequelize.js