Node.js MSSQL tedius ConnectionError: не удалось подключиться к localhost: 1433 - подключите ECONNREFUSED

Я пытаюсь подключиться к MSSQL 2012 с помощью NodeJS с интерфейсом подключения mssql.

При попытке подключения я получаю следующую ошибку:

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

Любые идеи о том, как это исправить?


person Matt Carrier    schedule 29.08.2014    source источник
comment
localhost также не работает для меня, но с использованием фактического IP-адреса устройства.   -  person amin.avan    schedule 24.07.2018
comment
@ amin.avan ну, это будет зависеть от того, запускаете ли вы базу данных локально или нет. Если вы используете базу данных локально, localhost должен работать. В противном случае я бы не ожидал, что это сработает.   -  person Matt Carrier    schedule 26.07.2018
comment
@MattCarrier Я получаю аналогичную ошибку, когда пытаюсь подключиться к Azure SQL из моего js-приложения node. Но там нет возможности включить или отключить TCP IP. Любое решение этой проблемы?   -  person Abhinandan Madaan    schedule 06.11.2019


Ответы (11)


Решение состоит в том, чтобы включить TCP-соединения, которые по умолчанию отключены.

введите описание изображения здесь

person Matt Carrier    schedule 29.08.2014
comment
+1 за скриншот. Я думал, что он включен, потому что я видел, что удаленные подключения включены в SSMS, но этого не произошло. - person Gibryon Bhojraj; 16.05.2017
comment
Как это сделать в Докере? - person gh0st; 26.06.2018
comment
В Windows 10 вы можете быстро получить доступ к окну конфигурации, нажав кнопку окна + R, затем введите: SQLServerManager13.msc - person Lothre1; 02.09.2019
comment
После обновления мне пришлось перезапустить службу SQL Server, и это сработало! - person Allwyn Dsouza; 30.01.2021

Мой случай был не совсем таким, как у Мэтта, но его скриншота было достаточно, чтобы вспомнить, чего мне не хватало.

введите описание изображения здесь

Как сказано здесь, когда вы используете имя экземпляра SQL Server для подключитесь к нему, у вас должен быть запущен браузер SQL Server.

options.instanceName

Имя экземпляра для подключения. Служба обозревателя SQL Server должна быть запущена на сервере базы данных, а UDP-порт 1434 на сервере базы данных должен быть доступен.

(нет по умолчанию)

Взаимоисключающий с options.port.

person MMalke    schedule 08.06.2015

Если после включения 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"
    }
};
person Player1    schedule 13.12.2016
comment
Это действительно помогло! - person Freddy Bonda; 06.02.2019

Если кто-то по-прежнему пытается подключиться, несмотря на все, что было предложено.
В моем случае мне пришлось вручную установить свойство TCP-порта на 1433 в конфигурации сети SQL Server -> Протоколы для ... -> TCP / IP -> IP-адреса -> IPAll.

[1]

person Alen    schedule 15.01.2019
comment
Для всех, кто сюда попал - моя проблема заключалась в том, что TCP / IP не был включен, хотя SSMS мог подключиться! Включение его в диспетчере конфигурации в указанном выше месте помогло мне. - person tristankoffee; 01.04.2020

Лучше всего сначала проверить соединение с SQL-сервером с помощью анализатора запросов (SQL Management Studio (Windows) или SQLPro для MSSQL (Mac)), используя тот же протокол, порт и учетные данные, которые вы хотите использовать в своем приложении.

В Management Studio формат: Сервер, Порт (например, 192.168.1.10,1433); и вы, вероятно, будете использовать аутентификацию SQL Server вместо аутентификации Windows.


Шаги по настройке SQL Server:

Установите со смешанной аутентификацией, если вы собираетесь использовать аутентификацию SQL Server.

Настройте SQL Server для прослушивания TCP на фиксированном номере порта:

  • SQL Configuration Manager SQL Server Network Configuration
    • Protocols for {Instance}
      • TCP/IP - Enabled (double-click)
      • IP Address (on all desired interfaces)
        • TCP Dynamic Ports = BLANK! (not zero)
        • TCP-порт - 1433 (или желаемый порт)
person Adam Gering    schedule 22.06.2016
comment
У меня это сработало, но только когда я установил 1433 в TCP Port раздела IPAll. Установка TCP Dynamic port на BLANK и TCP Port на 1433 для адреса Ioopback, т.е. только 127.0.0.1, не сработала. Я использую MS SQL Server 2014 - person Rajaraman; 12.03.2018
comment
Спасибо, этот ответ мне помог. - person Cristi Priciu; 11.01.2020

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

person Amresh Kumar    schedule 25.04.2018

В моем случае возникла проблема с конфигурацией. Это была неправильная конфигурация.

let config = {
server: 'localhost',
authentication: {
    type: 'default',
    options: {
        userName: 'sa', // update me
        password: 'xxxxx' // update me
    }
},
options: {
    database: 'SampleDB',
    validateBulkLoadParameters:false,
}}

Затем я добавил к параметрам переменную encrypt, что решило мою проблему.

let config = {
server: 'localhost',
authentication: {
    type: 'default',
    options: {
        userName: 'sa', // update me
        password: 'xxxxxx' // update me
    }
},
options: {
    database: 'SampleDB',
    validateBulkLoadParameters:false,
    encrypt: false,
}

}

person Susampath    schedule 10.09.2020

Помимо установки TCP-порта на 1433. Если вы получаете сообщение об ошибке «Соединение потеряно - невозможно вызвать запись после того, как поток был уничтожен»

Эта ошибка также возникнет, если вы используете options.encrypt: true на Node v12 + со старыми версиями SQL Server.

Это вызвано тем, что Node v12 требует TLS 1.2.

  • установите исправление безопасности TLS 1.2 для вашего SQL Server
  • запустить узел с флагом обратной совместимости:

    node --tls-min-v1.0

    eg: 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

person Tusar    schedule 17.05.2020

Мне не удалось подключиться к localhost, хотя я использую localhost в SQL Management Studio и других приложениях. Когда я использовал имя компьютера (сетевой адрес), это сработало!

person DaNeSh    schedule 05.08.2016

Моя проблема заключалась в том, что мне нужно было сначала запустить sqlserver с помощью docker на моем Mac, используя эту команду

sudo docker start sqlserver

person Awais Nasir    schedule 06.07.2020

Для меня сработало изменение этого условия с «Нет» на «Да»:

    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

person Aurel Havetta    schedule 08.07.2021