簡體   English   中英

在Linux / Ubuntu上使用Nodejs + MSSQL

[英]Working with Nodejs + MSSQL at Linux / Ubuntu

我已經將nodejs應用程序連接到MSSQL Server,可以在Windows筆記本電腦中完美運行 ,請發送mssql @ npm

同一應用程序無法在我的Ubuntu筆記本電腦中看到數據庫。

我在Ubuntu中定義了mssql連接,如下所示,我缺少任何東西嗎?

  1. 將我的〜/ .profile更新為:
  ~$ export ODBCINI=/etc/odbc.ini ~$ export ODBCSYSINI=/etc ~$ export FREETDSCONF=/etc/freetds/freetds.conf 
  1. 注銷筆記本電腦,以使上述活動生效,並刷新配置文件。

  2. 安裝了所需的連接軟件包。

  ~$ sudo apt-get install unixodbc unixodbc-dev freetds-dev sqsh tdsodbc -y 
  1. 已配置的FreeTDS
  ~$ sudo gedit /etc/freetds/freetds.conf [ACUMENSERVER] host = 192.168.0.10 port = 1433 tds version = 7.0 
  1. 使用sqsh測試了FreeTDS連接,並且工作正常:
  ~$ sqsh -S ACUMENSERVER -U mssql-username -P mssql-password 
  1. 配置的ODBC-odbcinst.ini:
  ~$ 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:
 ~$ sudo gedit /etc/odbc.ini [ACUMENSERVER] Driver = FreeTDS Description = ODBC connection via FreeTDS Trace = No Servername = ACUMENSERVER Database = myDataBase 
  1. 使用isql測試了ODBC連接,並且工作正常:
 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連接。

我發現如果使用服務器的IP地址,服務器名稱不起作用,這可以工作!

以下是與我合作的內容:

1個Instal 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之外,您將無法獲得netbios名稱解析...無論將其作為服務器名,如果無法從命令提示符下對myserver進行ping操作,您將無法通過節點連接

然后:

使用上面提到的IP(這意味着根本不需要安裝ODBCunix或FreeTDS),或者為局域網使用內部DNS,並使用完整的ADS名稱... myserver.domain.name ,可以解析(假設ADS用作本地解析的dns主機)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM