みなさん、こんにちは。
データベース接続に問題があります。 しばらくは問題なく動作しましたが、昨日からこのエラーが発生しています。 理由はわかりません。
[リクエストエラー:リクエストはログイン状態でのみ行うことができ、最終状態では行うことができません]
connection.on('connect', function(err) {
Console.log("-------here------");
if(err) {
return console.error(err); // <--
connected = false;
} else {
connected = true;
}
});
彼はconnection.onのコールバック関数に入っていないと思います。 彼は何も印刷せず、接続は常に偽です。
ありがとう !!
私も同様の問題を抱えています。
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何が起こっているのかを理解するのに十分な情報がここにありません。 表示されるエラーは、退屈なものがDBに接続されていないときにリクエストを実行しようとしたことを意味します。
@austincap接続が確立される前に、接続に対して要求を実行しています。 そのため、 Requests can only be made in the LoggedIn state, not the Connecting state
エラーが発生します。
私はこのすべての初心者ですが、接続デバッグイベントのハンドラーを追加すると、この正確なエラーに役立つことがわかりました。 接続がSQLサーバーによって拒否されていることがわかりました。
connection.on('debug', function(err) { console.log('debug:', err);});
var Connection = require( 'tedious')。Connection;
var Request = require( 'tedious')。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( "アプリは現在ポートで実行されています"、port);
});
//データベースへの接続を作成します
var config = {
認証:{
オプション:{
userName: 'username'、//更新してください
password: 'password' //更新してください
}、
タイプ: 'デフォルト'
}、
サーバー: 'servername.database.windows.net'、//更新してください
オプション:{
データベース: '開発'、//更新してください
暗号化:true //重要
}
}
// azureへの接続を作成します
var connection = new Connection(config);
// json配列を作成します
var data = []
関数executeStatement(query、res){
var request = new Request(query、function(err、rowCount、rows){
if(err){
console.log(err);
} それ以外 {
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 =( 'Select * from Products');
executeStatement(query、res);
});
// dbパスワードとユーザー資格情報がリセットされたため、接続できなかったことに気づきました
最も参考になるコメント
私はこのすべての初心者ですが、接続デバッグイベントのハンドラーを追加すると、この正確なエラーに役立つことがわかりました。 接続がSQLサーバーによって拒否されていることがわかりました。
connection.on('debug', function(err) { console.log('debug:', err);});