Nodejs 使用npm install mssql后一直连不上,提示"ESOCKET"

Nodejs 使用npm install mssql后一直连不上,提示"ESOCKET"

具体错误是:

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

我的代码,主要是按官网上的:

var sql = require('mssql');
    var config = {
        user: 'sa',
        password: '123456',
        server: 'localhost', // You can use 'localhost\\instance' to connect to named instance
        database: 'expressdb'
    };
    var connection = new sql.Connection(config);
    connection.connect(function(err) {
        if(err){
            var util = require('util');
            var tmp = util.inspect(err);
            res.send(tmp);
        }else{
            res.send("ok");
        }
    });

大家是否遇到过同样问题,在网上一直接不到答案?


3 回复

Nodejs 使用 npm install mssql 后一直连不上,提示 “ESOCKET”

具体错误是:

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

我的代码,主要是按官网上的:

var sql = require('mssql');
var config = {
    user: 'sa',
    password: '123456',
    server: 'localhost', // You can use 'localhost\\instance' to connect to named instance
    database: 'expressdb'
};

var connection = new sql.Connection(config);
connection.connect(function(err) {
    if(err){
        var util = require('util');
        var tmp = util.inspect(err);
        console.log(tmp); // 或者 res.send(tmp);
    } else {
        console.log("ok"); // 或者 res.send("ok");
    }
});

问题分析与解决

根据错误信息 connect ECONNREFUSEDESOCKET,可以推断出问题在于数据库连接被拒绝。这通常是因为以下几种原因之一:

  1. SQL Server 服务未运行

    • 确保 SQL Server 服务正在运行。你可以通过 Windows 服务管理器检查 SQL Server 的状态。
  2. 防火墙阻止了连接

    • 检查防火墙设置,确保端口 1433(默认的 SQL Server 端口)是开放的。
  3. 配置不正确

    • 检查配置文件中的用户名、密码、服务器地址是否正确。例如,如果你使用的是 SQL Server Express,服务器地址可能是 .\SQLEXPRESS 而不是 localhost
  4. 数据库不存在或用户无权限

    • 确认数据库 expressdb 是否存在,并且用户 sa 有访问该数据库的权限。

示例解决方案

修改配置文件以确保正确的连接字符串:

var config = {
    user: 'sa',
    password: '123456',
    server: '.\\SQLEXPRESS', // 如果使用 SQL Server Express
    database: 'expressdb'
};

确保 SQL Server 服务已启动,并且防火墙允许 1433 端口的流量。如果仍然有问题,可以在代码中添加更多的错误处理逻辑来帮助调试:

connection.connect(function(err) {
    if(err){
        console.error("Connection failed:", err.message);
    } else {
        console.log("Connected successfully!");
    }
});

通过这些步骤,你应该能够找到并解决连接失败的问题。


你需要确认sqlserver启动啦才行,可以使用telnet localhost 1433看看是否有响应,我估计会直接输出ECONNREFUSED的错误来

根据你提供的错误信息 ESOCKET 和错误描述,这通常意味着你的应用程序无法建立到 SQL Server 的连接。可能的原因包括 SQL Server 没有运行、配置错误、或者防火墙阻止了连接。

首先,确保 SQL Server 服务正在运行。你可以通过以下步骤检查:

  1. 打开 SQL Server 配置管理器。
  2. 确认 SQL Server 数据库引擎服务已经启动。

其次,检查连接字符串中的服务器地址和端口是否正确。例如,如果你使用的是默认实例并且监听 1433 端口,server: 'localhost' 是正确的。如果使用的是命名实例,则应使用类似 'localhost\\instancename' 的格式。

此外,确保 SQL Server 允许远程连接(即使是在本地),并且防火墙设置允许从你的应用程序到 SQL Server 的连接。

下面是一个修改后的代码示例,包含了一些基本的错误处理和日志记录,以帮助调试连接问题:

const sql = require('mssql');

const config = {
    user: 'sa',
    password: '123456',
    server: 'localhost', 
    database: 'expressdb',
    options: {
        encrypt: false // 如果使用的是不加密的连接
    }
};

sql.on('error', err => {
    console.error('SQL Error:', err);
});

async function testConnection() {
    try {
        const pool = await new sql.ConnectionPool(config).connect();
        console.log('Connected to SQL Server successfully.');
    } catch (err) {
        console.error('Failed to connect to SQL Server:', err.message);
    }
}

testConnection();

在这个示例中,我们使用了 await 来等待连接完成,并且添加了一个错误处理函数来打印出更详细的错误信息。如果仍然遇到问题,请检查日志输出以获取更多线索。

回到顶部