Tedious: 请求只能在 Logged In 状态下进行,不能在 Final 状态下——错误

创建于 2016-01-07  ·  4评论  ·  资料来源: tediousjs/tedious

大家好你们好,

我的数据库连接有问题。 它工作了一段时间,但从昨天开始我遇到了这个错误。 我不知道为什么。

【请求错误:请求只能在Logged In状态,不能在Final状态】

connection.on('connect', function(err) {
        Console.log("-------here------");
    if(err) {
        return console.error(err); // <--
        connected = false;
    } else {
        connected = true;
    }
});

我认为他没有进入connection.on的回调函数。 他不打印任何东西,并且连接总是错误的。

谢谢 !!

最有用的评论

我是一个新手,但我发现为连接调试事件添加一个处理程序帮助我解决了这个确切的错误。 我发现我的连接被 sql server 拒绝了。
connection.on('debug', function(err) { console.log('debug:', err);});

所有4条评论

我有一个类似的问题。

C:\Users\Austin\Desktop\prok>node prok.js
{ [RequestError: Requests can only be made in the LoggedIn state, not the Connecting state
]
  message: 'Requests can only be made in the LoggedIn state, not the Connecting state',
  code: 'EINVALIDSTATE' }
buffer.js:506
    throw new RangeError('index out of range');
          ^
RangeError: index out of range
    at checkOffset (buffer.js:506:11)
    at Buffer.readUInt8 (buffer.js:544:5)
    at Packet.isLast (C:\Users\Austin\Desktop\prok\node_modules\tedious\lib\packet.js:121:
29)
    at ReadablePacketStream.<anonymous> (C:\Users\Austin\Desktop\prok\node_modules\tedious
\lib\message-io.js:102:18)
    at ReadablePacketStream.emit (events.js:107:17)
    at readableAddChunk (C:\Users\Austin\Desktop\prok\node_modules\tedious\node_modules\re
adable-stream\lib\_stream_readable.js:201:16)
    at ReadablePacketStream.Readable.push (C:\Users\Austin\Desktop\prok\node_modules\tedio
us\node_modules\readable-stream\lib\_stream_readable.js:165:10)
    at ReadablePacketStream.Transform.push (C:\Users\Austin\Desktop\prok\node_modules\tedi
ous\node_modules\readable-stream\lib\_stream_transform.js:133:32)
    at ReadablePacketStream._transform (C:\Users\Austin\Desktop\prok\node_modules\tedious\
lib\message-io.js:68:16)
    at ReadablePacketStream.Transform._read (C:\Users\Austin\Desktop\prok\node_modules\ted
ious\node_modules\readable-stream\lib\_stream_transform.js:172:10)

我在这里几乎使用了确切的代码形式: https ://azure.microsoft.com/en-us/documentation/articles/sql-database-develop-nodejs-simple-linux/

--prok.js--

var Connection = require('tedious').Connection;
var config = {
    userName: 'tester',
    password: 'tester',
    server: 'localhost',
    options: {
        port:3306
    }
};
var connection = new Connection(config);
connection.on('connect', function(err) {
// If no error, then good to proceed.
    console.log("Connected");
});
var Request = require('tedious').Request;
var TYPES = require('tedious').TYPES;
function executeStatement() {
    request = new Request("SELECT * FROM testdb.testtable;", function(err) {
    if (err) {
        console.log(err);}
    });
    var result = "";
    request.on('row', function(columns) {
        console.log('row');
        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);
}

executeStatement();

@yossazou这里没有足够的信息来了解发生了什么。 您看到的错误意味着您尝试在繁琐的不再连接到数据库时执行请求。

@austincap您在建立连接之前正在对连接执行请求。 这就是您收到Requests can only be made in the LoggedIn state, not the Connecting state错误的原因。

我是一个新手,但我发现为连接调试事件添加一个处理程序帮助我解决了这个确切的错误。 我发现我的连接被 sql server 拒绝了。
connection.on('debug', function(err) { console.log('debug:', err);});

var Connection = require('乏味').Connection;
var Request = require('乏味').Request;
var express = require("express");
var bodyParser = require("body-parser");
var app = express();

// 正文解析器中间件
app.use(bodyParser.json());

//设置服务器
var server = app.listen(process.env.PORT || 8081, function () {
var port = server.address().port;
console.log("App 正在端口上运行", port);
});

// 创建与数据库的连接
变量配置 = {
验证: {
选项: {
userName: 'username', // 更新我
密码:'密码'//更新我
},
类型:'默认'
},
server: 'servername.database.windows.net', // 更新我
选项: {
database: 'development', //更新我
加密:真//重要
}
}
//创建到天蓝色的连接
var connection = new Connection(config);
//创建一个json数组
变量数据 = []
函数执行语句(查询,资源){
var request = new Request(query, function(err, rowCount, rows) {
如果(错误){
控制台日志(错误);
} 别的 {
console.log(rowCount + '行');
res.send({状态:200,数据:数据,消息:“OK”})
}
});

//connection.on('debug', function(err) { console.log('debug:', err);}); if the connection is not working

request.on('row', function (row) {
  data.push({
      ID: row[0].value,
      ProductName: row[1].value,
      Price: row[2].value,
      ProductDescription: row[3].value,
      CreatedDate: row[4].value,
      Username: row[5].value
  })

});
connection.execSql(request);
}

app.get('/api/products', function (req, res) {
var query =('从产品中选择 *');
执行语句(查询,资源);
});

//我注意到我的数据库密码和用户凭据已重置,因此无法建立连接

此页面是否有帮助?
0 / 5 - 0 等级