Here are my codes:
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);
when i run this file(index.js) as below
node index.js
It returns some error and don't show datas.
My mysql datas below:
INSERT INTO `deneme` (`id`, `name`) VALUES
(1, 'yusuf'),
(2, 'ali');
What is the problem?
The error is:
{ _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] } }
You're tying to do something synchronously instead of asynchronously.
Your problem is here:
data = connection.query('SELECT * FROM deneme', function(err, rows, fields){
if(err) throw err;
veri = rows;
return veri;
});
console.log(data);
You're logging data before the callback has been executed. This is why you need to have the code inside its callback, so it says "once you have finished getting the database results, do this".
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
});
You can access the results outside of this function by doing something like this:
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);
}
You can look at a module called async which is good at doing what you're trying to do.
https://github.com/caolan/async
P.S
Welcome to nodejs.