我正在尝试使用带有mssql连接接口的NodeJS连接到MSSQL 2012。
尝试连接时出现以下错误:
{ [ConnectionError: Failed to connect to localhost:1433 - connect ECONNREFUSED]
name: 'ConnectionError',
message: 'Failed to conncet to localhost:1433 - connect ECONNREFUSED',
code: 'ESOCKET' }
有关如何解决此问题的任何想法?
答案 0 :(得分:83)
解决方案是启用默认禁用的TCP连接。
答案 1 :(得分:18)
我的情况与马特的情况完全不一样,但他的截图足以让我记住遗漏的东西。
正如here所述,当您使用SQL Server实例名称连接到它时,您必须运行SQL Server Browser。
options.instanceName 要连接的实例名称。 SQL Server Browser服务必须在数据库服务器上运行,并且必须可以访问数据库服务器上的UDP端口1444。 (没有默认值) 与options.port互斥。
答案 2 :(得分:10)
如果启用TCP连接后仍然无法正常配置。这是我自己的配置。
var config = {
"user": 'admin',
"password": 'password',
"server": 'ALBERT-PC',
"database": 'database_name',
"port": '61427',
"dialect": "mssql",
"dialectOptions": {
"instanceName": "SQLEXPRESS"
}
};
答案 3 :(得分:5)
最佳做法是首先使用查询分析器(SQL Management Studio(Windows)或SQLPro for MSSQL(Mac))使用与您希望通过应用程序使用的相同协议,端口和凭据验证与SQL Server的连接
在Management Studio中,格式为Server,Port(例如192.168.1.10,1433);你可能会使用SQL Server身份验证而不是Windows身份验证。
配置SQL Server的步骤:
如果您打算使用SQL Server身份验证,请使用混合身份验证进行安装。
设置SQL Server以在固定端口号上侦听TCP:
答案 4 :(得分:3)
**Please follow the connection configuration and little test:**
//Declare global variable
var http = require('http');
var events = require('events');
var nodemailer = require('nodemailer');
var sql = require('mssql');<br/>
var Request = require('tedious').Request;
var TYPES = require('tedious').TYPES;
//Create an http server
http.createServer(function(req,res)
{
res.writeHead(200, {'Content-Type': 'text/html'});
var Connection = require('tedious').Connection;
//Configure the connection
var config = {
userName: '<user id>',
password: '<password>',
server: '<system ip>',
options: {database: '<database name>'}
};
var connection = new Connection(config);
connection.on('connect', function(err) {
console.log("Connected");
executeStatement();
});
function executeStatement() {
request = new Request("select getdate();", function(err) {
if (err) {
console.log(err);}
});
var result = "";
request.on('row', function(columns) {
columns.forEach(function(column) {
if (column.value === null) {
console.log('NULL');
} else {
result+= column.value + " ";
}
});
console.log(result);
result ="";
});
connection.execSql(request);
};
return res.end();
}).listen(8080);
//在浏览器上发布配置测试: http://localhost:8080/
答案 5 :(得分:3)
如果尽管提出了所有建议,仍然有人仍在努力保持联系。
就我而言,我必须在SQL Server网络配置->协议...-> TCP / IP-> IP地址-> IPAll中手动将TCP端口属性设置为1433。
[
答案 6 :(得分:2)
在我的情况下,出现配置问题。这是错误的配置
let config = {
server: 'localhost',
authentication: {
type: 'default',
options: {
userName: 'sa', // update me
password: 'xxxxx' // update me
}
},
options: {
database: 'SampleDB',
validateBulkLoadParameters:false,
}}
然后我在选项中添加了加密变量。它解决了我的问题。正确的配置
let config = {
server: 'localhost',
authentication: {
type: 'default',
options: {
userName: 'sa', // update me
password: 'xxxxxx' // update me
}
},
options: {
database: 'SampleDB',
validateBulkLoadParameters:false,
encrypt: false,
}
}
答案 7 :(得分:1)
我无法连接'localhost',尽管我在SQL Management Studio和其他应用程序中使用'localhost'。 当我使用计算机名称(网络地址)时,它工作正常!
答案 8 :(得分:1)
除了将TCP端口号设置为1433。 如果出现“连接丢失-流被破坏后无法调用写入”错误
如果您使用options.encrypt:在具有旧版SQL Server版本的Node v12 +上为true,也会发生此错误。
这是由节点v12需要TLS 1.2引起的。
具有向后兼容性标志的运行节点:
<form action="../php/login.php" method="post">
<input id = "loginButton" type="image" src ="../images/loginAndRegister.gif" alt="submit">
<div class = "panel">
<p> Login </p>
<br>
<br>
<label> username </label>
<br>
<input type = "text" name = "username" required>
<br>
<label> password </label>
<br>
<input type = "password" name = "password" required>
<br>
<p id = "wrongLogin"> Incorrect username or password </p>
</div>
</form>
例如:node --tls-min-v1.0
通过设置
禁用加密通信 node --tls-min-v1.0 app.js
(可选)
配置对象:
options.encrypt: false
参考: https://github.com/tediousjs/tedious/issues/903#issuecomment-614597523
答案 9 :(得分:0)
我的问题是我需要首先使用此命令在Mac上使用docker启动sqlserver
sudo docker start sqlserver
答案 10 :(得分:0)
对我来说,将此条件从“否”更改为“是”有效:
switch (key) {
case 'instance':
return this.config.options.instanceName
case 'trusted':
return this.config.options.trustedConnection ? 'Yes' : 'Yes'
即使我提供它,它也不会从选项对象加载值。
我在文件 \node_modules\mssql\lib\msnodesqlv8\connection-pool.js
中硬编码了这个更改