节点与SQL Server(Microsoft)连接到数据库

时间:2017-07-17 09:36:26

标签: sql-server node.js sockets tcp

我需要为模块提供SQL连接(使用名为mssql的库),所以我提供了这样的代码:

var config = {
    server: "149.xxx.xx.x",
    database: "Database",
    user: "User",
    password: "Password",
    connectionTimeout: 300000,
    requestTimeout: 300000,
    pool: {
        idleTimeoutMillis: 300000,
        max: 100
    }
};

function getEmp() {
    var connection = new sql.Connection(config);
    var req = new sql.Request(connection);

    connection.connect(function (error) {
        if(error) {
            console.log(error);
            return;
        }
        req.query('Procedure', function(err, data) {
            if (err) {
                console.log(err);
            } else {
                console.log(data);
            }
            connection.close();
        });
    });
}

getEmp();` 

我收到错误:

 { ConnectionError: Failed to connect to 149.xxx.xx.x:1433 - connect
ETIMEDOUT 149.xxx.xx.x:1433 at Connection.<anonymous>
(/Users/xx/Learning/NodeJS/srv-express/node_modules/mssql/lib/tedious.js:353:25)
at Connection.g (events.js:292:16) at emitOne (events.js:96:13) at
Connection.emit (events.js:188:7) at Connection.socketError
(/Users/xx/Learning/NodeJS/srv-express/node_modules/tedious/lib/connection.js:791:12)
at Socket.<anonymous>
(/Users/xx/Learning/NodeJS/srv-express/node_modules/tedious/lib/connection.js:33:15)
at emitOne (events.js:96:13) at Socket.emit (events.js:188:7) at
emitErrorNT (net.js:1277:8) at _combinedTickCallback
(internal/process/next_tick.js:80:11)


name: 'ConnectionError',   message: 'Failed to connect to
49.xxx.xx.x:1433 - connect ETIMEDOUT 149.xxx.xx.x:1433',   code: 'ESOCKET' }

确保数据正确 - DataGrip在这里正常连接。

我在谷歌发现了类似的问题,问题是禁用了TCP / IP。我检查过这个,它已经通过这个端口1443启用了。

  

启用TCP / IP,命名管道和共享内存。

     

TCP动态端口:1443 TCP端口:空

1 个答案:

答案 0 :(得分:2)

要查找18456错误“登录用户失败...”的原因,应检查SQLServer错误日志。

如果是

  

原因:无法打开显式指定的数据库'数据库   名称

首先应检查数据库的状态,如果它在线,如下:

 select name, 
       user_access_desc, 
       state_desc 
 from sys.databases where name='yourDatabase'

如果数据库在线,下一步是检查用户是否可以访问数据库(如果它已映射到数据库:)

 select * 
 from yourDB.sys.database_principals 
 where name = 'YourUserName';

此代码仅用于检查与sql server登录对应的用户的存在(Windows登录可以使用Windows组登录访问服务器,用户也是如此)

如果用户不存在,我们应该为此登录创建用户并为其授予适当的权限。这是用户cteation的链接 CREATE USER (Transact-SQL)