使用Sequelize连接到MSSQL Server

Ala*_*mas 4 javascript sql-server azure sequelize.js

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

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');
    }
});
Run Code Online (Sandbox Code Playgroud)

但是,使用等效的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);
});
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

使用:sequelize 3.29.0,乏味的1.14.0,SQL Server v12

小智 7

我遇到错误了

SequelizeConnectionError: Server requires encryption, set 'encrypt' config option to true.

我使用Azure SQL数据库进行了尝试,以下方法对我有效。

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


小智 6

如果您正在尝试使用 Azure SQL 数据库,您可能还需要指定更长的请求超时值:

[...]
dialectOptions: {
    requestTimeout: 30000 // timeout = 30 seconds
}
[...]
Run Code Online (Sandbox Code Playgroud)


Aar*_*hen 1

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

在此输入图像描述

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