[英]Working with Nodejs + MSSQL at Linux / Ubuntu
我已经将nodejs应用程序连接到MSSQL Server,可以在Windows笔记本电脑中完美运行 ,请发送mssql @ npm
同一应用程序无法在我的Ubuntu笔记本电脑中看到数据库。
我在Ubuntu中定义了mssql连接,如下所示,我缺少任何东西吗?
~$ export ODBCINI=/etc/odbc.ini ~$ export ODBCSYSINI=/etc ~$ export FREETDSCONF=/etc/freetds/freetds.conf
注销笔记本电脑,以使上述活动生效,并刷新配置文件。
安装了所需的连接软件包。
~$ sudo apt-get install unixodbc unixodbc-dev freetds-dev sqsh tdsodbc -y
~$ sudo gedit /etc/freetds/freetds.conf [ACUMENSERVER] host = 192.168.0.10 port = 1433 tds version = 7.0
~$ sqsh -S ACUMENSERVER -U mssql-username -P mssql-password
~$ 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
~$ sudo gedit /etc/odbc.ini [ACUMENSERVER] Driver = FreeTDS Description = ODBC connection via FreeTDS Trace = No Servername = ACUMENSERVER Database = myDataBase
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 ... */ });
您可能需要为myServer
使用DNS解析器。在Windows之外,您将无法获得netbios名称解析...无论将其作为服务器名,如果无法从命令提示符下对myserver进行ping操作,您将无法通过节点连接
然后:
使用上面提到的IP(这意味着根本不需要安装ODBCunix或FreeTDS),或者为局域网使用内部DNS,并使用完整的ADS名称... myserver.domain.name
,可以解析(假设ADS用作本地解析的dns主机)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.