programing

Node.js MSSQL tedius 연결 오류: localhost: 1433에 연결하지 못했습니다. - connect ECONFUSED

lastmoon 2023. 6. 26. 21:34
반응형

Node.js MSSQL tedius 연결 오류: localhost: 1433에 연결하지 못했습니다. - connect ECONFUSED

노드를 사용하여 MSSQL 2012에 연결하려고 합니다.mssql 연결 인터페이스가 있는 JS.

연결을 시도할 때 다음 오류가 발생합니다.

{ [ConnectionError: Failed to connect to localhost:1433 - connect ECONNREFUSED]
  name: 'ConnectionError',
  message: 'Failed to conncet to localhost:1433 - connect ECONNREFUSED',
  code: 'ESOCKET' }

이 문제를 해결할 방법이 있습니까?

솔루션은 기본적으로 비활성화된 TCP 연결을 활성화하는 것입니다.

enter image description here

제 경우는 매트의 경우와 똑같지는 않았지만, 그의 스크린샷은 제가 잃어버린 것을 기억하기에 충분했습니다.

enter image description here

여기에서 설명하는 것처럼 SQL Server 인스턴스 이름을 사용하여 연결할 때는 SQL Server 브라우저가 실행 중이어야 합니다.

옵션.instanceName

연결할 인스턴스 이름입니다.SQL Server Browser 서비스가 데이터베이스 서버에서 실행 중이어야 하며 데이터베이스 서버의 UDP 포트 1434에 연결할 수 있어야 합니다.

(기본값 없음)

options.port와 상호 배타적입니다.

TCP 연결을 활성화한 후에도 구성이 여전히 작동하지 않는 경우.이것이 제가 직접 만든 구성입니다.

var config = {
    "user": 'admin',
    "password": 'password',
    "server": 'WINDOWS-PC',
    "database": 'database_name',
    "port": 61427, // make sure to change port
    "dialect": "mssql",
    "dialectOptions": {
        "instanceName": "SQLEXPRESS"
    }
};

만약 누군가가 제안된 모든 것을 했음에도 불구하고 여전히 연결하려고 노력한다면,
제 SQL Server Network Configuration -> Protocols for ... -> TCP/IP -> IP Addresses -> IPAll의 TCP Port에서 1433번째로 지정합니다.

[1]

애플리케이션을 통해 사용하려는 것과 동일한 프로토콜, 포트 및 자격 증명을 사용하여 쿼리 분석기(SQL Management Studio(Windows) 또는 SQL Pro for MSSQL(Mac))를 사용하여 SQL 서버에 대한 연결을 먼저 확인하는 것이 가장 좋습니다.

Management Studio에서 형식은 Server,Port(예: 192.168.1.10,1433)이며 Windows 인증 대신 SQL Server 인증을 사용하게 될 것입니다.


SQL 서버를 구성하는 단계:

SQL Server 인증을 사용하려는 경우 혼합 인증을 사용하여 설치합니다.

고정 포트 번호의 TCP에서 수신 대기하도록 SQL Server 설정:

  • SQL 구성 관리자 SQL 서버 네트워크 구성
    • {Instance}에 대한 프로토콜
      • TCP/IP - 사용(두 번 클릭)
      • IP 주소(원하는 모든 인터페이스)
        • TCP 동적 포트 = BLANK!(0이 아님)
        • TCP 포트 - 1433(또는 원하는 포트)

제 경우에는 구성 문제가 있었습니다.잘못된 구성입니다.

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,
}

}

**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/

TCP 포트 번호를 1433으로 설정하는 것 외에는."연결 끊김 - 스트림이 삭제된 후에 쓰기를 호출할 수 없습니다" 오류가 발생하는 경우

이전 SQL Server 버전의 Node v12+에서 options.encrypt: true를 사용하는 경우에도 이 오류가 발생합니다.

이 문제는 TLS 1.2가 필요한 노드 v12로 인해 발생합니다.

  • SQL Server에 대한 TLS 1.2 보안 패치 설치
  • 이전 버전과의 호환성 플래그가 있는 실행 노드:

    node --tls-min-v1.0

    예:node --tls-min-v1.0 app.js

  • 설정으로 암호화된 통신 사용 안 함

    options.encrypt: false(선택 사항)

개체 구성:

const config = {
      user: '...',
      password: '...',
      server: 'localhost', 
      database: '...',
      'options.encrypt': false   
   }

참조: https://github.com/tediousjs/tedious/issues/903#issuecomment-614597523

SQL Management Studio 및 다른 응용 프로그램에서 'localhost'를 사용하지만 'localhost'와 연결할 수 없습니다.컴퓨터 이름(네트워크 주소)을 사용했을 때 작동했습니다!

문제는 이 명령을 사용하여 Mac에서 먼저 도커를 사용하여 SQL Server를 시작해야 한다는 것입니다.

sudo docker start sqlserver

이 조건을 '아니오'에서 '예'로 변경하는 데 효과가 있었습니다.

    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에서 하드 코딩했습니다.

연결 오류: 다음에 연결하지 못했습니다. 오류: D42A0000: 오류: 0A000102:SSL 루틴:ssl_choose_client_version:지원되지 않는 프로토콜

dbConfig1 = {
    user: 'XXXX',
    password: 'XXXX',
    server: 'XXXX',
    port: XXXX,
    database: 'XXXX'
}

솔루션:"암호화"를 추가했습니다. false.

dbConfig1 = {
    user: 'XXXX',
    password: 'XXXX',
    server: 'XXXX',
    port: XXXX,
    database: 'XXXX',
    options: {
        "encrypt": false
    }
}

언급URL : https://stackoverflow.com/questions/25577248/node-js-mssql-tedius-connectionerror-failed-to-connect-to-localhost1433-conn

반응형