0

これが私のコードです:

var mysql      = require('mysql');
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '1',
  database : 'test'
});
connection.connect();

data = connection.query('SELECT * FROM deneme', function(err, rows, fields){
    if(err) throw err;
    veri = rows;
    return veri;
});

console.log(data);

このファイル(index.js)を以下のように実行すると

ノードindex.js

エラーが返され、データは表示されません。

以下の私のmysqlデータ:

INSERT INTO `deneme` (`id`, `name`) VALUES
(1, 'yusuf'),
(2, 'ali');

何が問題ですか?

エラーは次のとおりです。

{ _callback: [Function],
  _ended: false,
  _callSite: '    at Query.Sequence (/home/yusuf/Masaüstü/node/node_modules/mysql/lib/protocol/sequences/Sequence.js:15:21)\n    at new Query (/home/yusuf/Masaüstü/node/node_modules/mysql/lib/protocol/sequences/Query.js:11:12)\n    at Protocol.query (/home/yusuf/Masaüstü/node/node_modules/mysql/lib/protocol/Protocol.js:41:24)\n    at Connection.query (/home/yusuf/Masaüstü/node/node_modules/mysql/lib/Connection.js:90:25)\n    at Object.<anonymous> (/home/yusuf/Masaüstü/node/index.js:10:19)\n    at Module._compile (module.js:446:26)\n    at Object..js (module.js:464:10)\n    at Module.load (module.js:353:31)\n    at Function._load (module.js:311:12)\n    at Array.0 (module.js:484:10)',
  sql: 'SELECT * FROM deneme',
  typeCast: true,
  nestTables: false,
  _resultSet: null,
  _results: [],
  _fields: [],
  _index: 0,
  _loadError: null,
  _events: { error: [Function], packet: [Function], end: [Function] } }
4

1 に答える 1

1

あなたは非同期ではなく同期的に何かをすることに結びついています。

あなたの問題はここにあります:

data = connection.query('SELECT * FROM deneme', function(err, rows, fields){
    if(err) throw err;
    veri = rows;
    return veri;
});

console.log(data);

コールバックが実行される前にデータをログに記録しています。これが、コールバック内にコードを含める必要がある理由です。そのため、「データベースの結果の取得が完了したら、これを実行してください」と表示されます。

data = connection.query('SELECT * FROM deneme', function(err, rows, fields){
    if(err) throw err;
    veri = rows;
    console.log(veri); // will be logged once its finished
});

次のようにすると、この関数の外部で結果にアクセスできます。

var results;
data = connection.query('SELECT * FROM deneme', function(err, rows, fields){
    if(err) throw err;
    veri = rows;
    results = veri;
    someOtherFunction();
});

var someOtherFunction = function(){
  console.log(results);
}

asyncあなたはあなたがやろうとしていることをするのが得意であると呼ばれるモジュールを見ることができます。

https://github.com/caolan/async

PS

nodejsへようこそ。

于 2012-12-29T15:04:11.270 に答える