在 Linux / Ubuntu 使用 Nodejs + MSSQL
Working with Nodejs + MSSQL at Linux / Ubuntu
我已将我的 nodejs 应用程序连接到 MSSQL 服务器,在我的 Windows 笔记本电脑上运行完美,唱 mssql@npm
同一应用无法在我的 Ubuntu 笔记本电脑中查看数据库。
我在 Ubuntu 中定义的 mssql 连接如下,我是否遗漏了什么?
- 更新了我的 ~/.profile,如:
~$ 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
- 已配置 FreeTDS
~$ sudo gedit /etc/freetds/freetds.conf
[ACUMENSERVER]
host = 192.168.0.10
port = 1433
tds version = 7.0
- 用 sqsh 测试了 FreeTDS 连接,它工作正常:
~$ sqsh -S ACUMENSERVER -U mssql-username -P mssql-password
- 配置的 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
- 配置的 ODBC - odbc.ini:
~$ sudo gedit /etc/odbc.ini
[ACUMENSERVER]
Driver = FreeTDS
Description = ODBC connection via FreeTDS
Trace = No
Servername = ACUMENSERVER
Database = myDataBase
- 用 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' }
这里的 wrong/missing 可能是什么,我愿意使用另一个 npm 包进行 mssql 连接。
我发现如果使用服务器的 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 ... */ });
您可能需要 myServer
的 DNS 解析器 .. 在 windows 之外,您将无法获得 netbios 名称解析...无论您输入什么作为服务器名,如果您不能从命令提示符 ping myserver,您将无法通过 node
连接
然后:
要么使用上面提到的 IP(这意味着根本不需要安装 ODBCunix 和 FreeTDS),要么为本地网络使用内部 DNS 并使用完整的 ADS 名称...myserver.domain.name
应该解析(假设 ADS 用作本地解析的 dns 主机)。
我已将我的 nodejs 应用程序连接到 MSSQL 服务器,在我的 Windows 笔记本电脑上运行完美,唱 mssql@npm
同一应用无法在我的 Ubuntu 笔记本电脑中查看数据库。
我在 Ubuntu 中定义的 mssql 连接如下,我是否遗漏了什么?
- 更新了我的 ~/.profile,如:
~$ 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
- 已配置 FreeTDS
~$ sudo gedit /etc/freetds/freetds.conf [ACUMENSERVER] host = 192.168.0.10 port = 1433 tds version = 7.0
- 用 sqsh 测试了 FreeTDS 连接,它工作正常:
~$ sqsh -S ACUMENSERVER -U mssql-username -P mssql-password
- 配置的 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
- 配置的 ODBC - odbc.ini:
~$ sudo gedit /etc/odbc.ini [ACUMENSERVER] Driver = FreeTDS Description = ODBC connection via FreeTDS Trace = No Servername = ACUMENSERVER Database = myDataBase
- 用 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' }
这里的 wrong/missing 可能是什么,我愿意使用另一个 npm 包进行 mssql 连接。
我发现如果使用服务器的 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 ... */ });
您可能需要 myServer
的 DNS 解析器 .. 在 windows 之外,您将无法获得 netbios 名称解析...无论您输入什么作为服务器名,如果您不能从命令提示符 ping myserver,您将无法通过 node
然后:
要么使用上面提到的 IP(这意味着根本不需要安装 ODBCunix 和 FreeTDS),要么为本地网络使用内部 DNS 并使用完整的 ADS 名称...myserver.domain.name
应该解析(假设 ADS 用作本地解析的 dns 主机)。