使用Sequelize连接到MSSQL服务器

11

使用以下繁琐的代码,我可以成功连接到 Azure SQL 服务器。

const Connection = require('tedious').Connection;

const connection = new Connection({
    userName: '[USER]',
    password: '[PASSWORD]',
    server: '[HOSTNAME]',
    options: {encrypt: true}
});

connection.on('connect', (err) => {
    if (err) {
        console.log('error connecting', err);
    } else {
        console.log('connection successful');
    }
});

然而,使用应该等效的 Sequelize 代码时,我会收到连接超时错误。

const Sequelize = require('sequelize');

const sequelize = new Sequelize('[DBNAME]', '[USER]', '[PASSWORD]', {
    dialect: 'mssql',
    host: '[HOSTNAME]',
    dialectOptions: {
        encrypt: true
    }
});

sequelize.authenticate().then((err) => {
    console.log('Connection successful', err);
})
.catch((err) => {
    console.log('Unable to connect to database', err);
});

有什么想法吗?

使用:sequelize 3.29.0,tedious 1.14.0,SQL Server v12

4个回答

18

我遇到了以下错误

SequelizeConnectionError: 服务器要求加密,请将 'encrypt' 配置选项设置为 true。

我尝试了 Azure SQL 数据库,并且以下方法对我有效。

const sequelize = new Sequelize('DB Name', 'Username', 'Password', {
    host: 'Host',
    dialect: 'mssql',
    dialectOptions: {
        options: {
            encrypt: true,
        }
    }
  });

6
如果您正在尝试使用Azure SQL Database,您可能还需要指定更长的请求超时值:
[...]
dialectOptions: {
    requestTimeout: 30000 // timeout = 30 seconds
}
[...]

1
我尝试了您的Sequelize代码,它可以正常工作。因此,您可能需要添加客户端IP地址以允许访问Azure SQL Server。要执行此操作,请转到Azure门户网站,单击所有资源,选择您的SQL服务器,单击防火墙位于设置菜单中。

enter image description here

您的客户端地址已方便地包含在列表中,因此您只需单击添加客户端IP,然后再单击保存即可。现在运行代码时,应该可以连接。


我的客户端IP已经被添加到防火墙白名单中,这就是Tedious代码直接连接的方式。我感到困惑的是,为什么当Sequelize只是使用Tedious进行连接时,Tedious代码可以正常连接,但Sequelize代码却不能。 - Alan Thomas

-1
如果您正在使用SQL Server Management Studio,则只需将dialect:'mysql'替换为dialect:'mssql'
 const sequelize = new Sequelize('DB Name', 'Username', 'Password', {
    host: 'Host',
    dialect: 'mssql',
    dialectOptions: {
        options: {
            encrypt: true,
        }
    }
  });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接