在Linux / Ubuntu上使用Nodejs + MSSQL

时间:2016-01-11 15:44:02

标签: sql-server node.js ubuntu freetds unixodbc

我的nodejs应用已连接到MSSQL服务器,在我的Windows笔记本电脑上运行完美,可以唱mssql@npm

同一个应用程序无法在我的Ubuntu笔记本电脑中看到数据库。

我在Ubuntu中定义了mssql连接,如下所示,我错过了什么?

  1. 更新了我的〜/ .profile,如:
  2.   ~$ export ODBCINI=/etc/odbc.ini
      ~$ export ODBCSYSINI=/etc
      ~$ export FREETDSCONF=/etc/freetds/freetds.conf
    
    1. 注销笔记本电脑,使上述活动状态恢复正常,然后刷新配置文件。

    2. 安装了所需的连接包。

    3.   ~$ sudo apt-get install unixodbc unixodbc-dev freetds-dev sqsh tdsodbc -y
      
      1. 已配置FreeTDS
      2.   ~$ sudo gedit /etc/freetds/freetds.conf
        
           [ACUMENSERVER]
           host = 192.168.0.10
           port = 1433
           tds version = 7.0
        
        1. 使用sqsh测试了FreeTDS连接,它运行正常:
        2.   ~$ sqsh -S ACUMENSERVER -U mssql-username -P mssql-password
          
          1. 已配置的ODBC - odbcinst.ini:
          2.   ~$ sudo gedit /etc/odbcinst.ini
            
                 [FreeTDS]
                 Description     = TDS driver (Sybase/MS SQL)
                 Driver          = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
                 Setup           = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
                 CPTimeout       =
                 CPReuse         =
                 FileUsage       = 1
            
            1. 已配置的ODBC - odbc.ini:
            2. ~$ sudo gedit /etc/odbc.ini
              
                 [ACUMENSERVER]
                    Driver          = FreeTDS
                    Description     = ODBC connection via FreeTDS
                    Trace           = No
                    Servername      = ACUMENSERVER
                    Database        = myDataBase
              
              1. 使用isql测试了ODBC连接,它运行正常:
              2. isql -v ACUMENSERVER mssql-username mssql-passward
                

                当我运行我的nodejs应用程序(在Windows中运行正常)时,我在Ubuntu中得到了以下错误,考虑到以上所有内容已完成,并检查:

                { name: 'ConnectionError',
                  message: 'Failed to connect to ACUMENSERVER:1433 - getaddrinfo ENOTFOUND',
                  code: 'ESOCKET' }
                

                这里可能是错误/遗漏的东西,我打开使用另一个npm包进行mssql连接。

1 个答案:

答案 0 :(得分:0)

我发现如果使用服务器的IP地址,服务器名称不起作用,这可以工作!

低于我的工作:

1安装mssql:

npm install mssql

2 index.js文件:

var sql = require('mssql');

var config = {
    user: 'sa',
    password: 'sql@123',
//  server: 'myServername',  --> Not Working
//  server: 'ACUMENSERVER',  --> Not Working
    server: '6192.168.0.10', // WORKED
    database: 'myDB'
}

sql.connect(config).then(function() { 
// Query 

new sql.Request().query('select top 1 itemcode from OITM').then(function(recordset) {
    console.dir(recordset);
    }).catch(function(err) {console.log(err); /* ... query error checks ... */ });


// Stored Procedure 

new sql.Request()
    .input('input_parameter', sql.Int, value)
    .output('output_parameter', sql.VarChar(50))
    .execute('procedure_name').then(function(recordset) {
         console.dir(recordset);
     }).catch(function(err) {console.log(err); /* ... execute error checks ... */ });



}).catch(function(err) {console.log(err); /* ... connect error checks ... */ });
Michael J. Ryan

更新

您可能需要myServer的DNS解析器。在Windows之外,如果您无法从命令提示符ping myserver,则不会获得netbios名称解析...无论您将其作为服务器名称放置,您将无法通过节点连接

然后:

使用上面提到的IP(这意味着根本不需要安装ODBCunix和FreeTDS),或者拥有本地网络的内部DNS并使用完整的ADS名称...... myserver.domain.name解决(假设ADS用作本地解析的dns主机)。