You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js连接MSSQL对接Magento遇状态错误请求失败求助

解决Node.js连接MSSQL时的"Requests can only be made in the LoggedIn state"错误

看起来你遇到的问题核心是连接并未成功建立,但你依然尝试执行SQL查询——从错误栈里的socketError能看出来,你的连接过程中出现了网络或配置相关的错误,但你的代码没有处理这些错误,直接在connect事件里执行了executeStatement(),此时连接处于Connecting而非LoggedIn状态,所以触发了这个错误。

问题出在这几处:

  • 没有处理connect事件的err参数:当连接失败时,err会有值,但你直接忽略了它,依然执行查询
  • 没有监听连接的error事件:无法捕获连接过程中的底层错误(比如socket连接失败、认证错误)
  • request变量是全局的:可能引发意外的变量污染

修改后的代码:

var Connection = require('tedious').Connection;
var Request = require('tedious').Request;
var TYPES = require('tedious').TYPES;

var config = {
  userName: 'Cool userName',
  password: 'awesome password',
  server: 'amazing server',
  options: {
    database: 'database',
  }
};

var connection = new Connection(config);

// 监听连接错误事件,捕获底层问题
connection.on('error', function(err) {
  console.error('连接过程中发生错误:', err);
});

connection.on('connect', function(err) {
  // 先检查连接是否成功
  if (err) {
    console.error('连接失败:', err);
    return;
  }
  console.log("Connected");
  executeStatement();
});

function executeStatement() {
  // 把request声明为局部变量,避免全局污染
  const request = new Request("select * from Artikelstamm;", function(err) {
    if (err) {
      console.error('查询执行错误:', err);
    }
  });

  let 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 ="";
  });

  request.on('done', function(rowCount, more) {
    console.log(rowCount + ' rows returned');
  });

  connection.execSql(request);
}

关键修改说明:

  1. 处理connect事件的错误:在connect回调里先判断err,只有连接成功(err为null)才执行查询,否则打印错误信息
  2. 添加error事件监听:可以捕获连接过程中的底层错误,比如服务器不可达、账号密码错误、SSL配置问题等,这能帮你定位真正的连接失败原因
  3. 将request改为局部变量:使用const声明,避免全局变量带来的意外问题
  4. 优化错误日志:把console.log改为console.error区分错误信息,便于排查

额外排查建议:

  • 确认你的server地址、userName、password、database配置完全正确
  • 检查你的Node.js服务器是否能访问MSSQL服务器的端口(默认1433),可能需要开放防火墙
  • 如果是远程MSSQL服务器,确认是否开启了远程连接权限,以及SQL Server的身份验证模式是否为混合模式(如果使用SQL账号的话)

内容的提问来源于stack exchange,提问作者dasKamel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:22:03