NodeJS + Mysql return data and getting ??

selamat sore, mau nanya gan saya baru belajar NodeJs dengan DB mysql. sebelumya Crud sudah berhasil tapi saya jadikan satu proses querynya di dalam file yang sama, nah saya coba buat fungsi querynya terpisah, tapi ternya Js ga bisa begitu aja nge return Data yang di hasilin dari query dari fungsinya . data berhasil di cosole.log() di dalam fungsi nya , tapi begitu di return dan di tangkep di file utamanya hasilnya malah undifined ? berikut script nya yang undifined :

Hasil -->


C:\Users\saputroandhi\node\datanode>node server
connected
undefined

File Utama -->

 app.get('/',function(req,resp){
    var lib = require('./models/blog');
    console.log(lib.content());
});

file fungsinya ---->

 module.exports = {
  content: function(){
    connection.query("SELECT * FROM blog;",function(error,results,fields){
      if(!!error){
        console.log('kaga konek');
      }else{
        return results;
      }
    });
  }
}

TAPI !!! kalo saya langsung console.log(results) nya di dalam fungsi yang saya buat data berhasil keluar

ini hasilnya

 C:\Users\saputroandhi\node\datanode>node server
connected
undefined
[ RowDataPacket {
    blog_id: 1,
    blog_title: 'Belajar Node JS',
    blog_sub_title: 'Belajar Node Js Untuk Pemula',
    blog_slug: 'belajar-node-js-untuk-pemula',
    blog_image: 'https://camo.githubusercontent.com/b6ba9075a54c192efc59bba53c92e7c23ec8cfe8/68747470733a2f2f63646e2e7261776769742e636f6d2f67696c626172626172612f6c6f676f732f653762316463323636366333646162653663313237366162643061373637623665626436616634332f6c6f676f732f6e6f64656a732d69636f6e2e737667',
    blog_text: 'Ini adalah blog pertama saya dengan node Js Ini adalah blog pertama saya dengan node Js Ini adalah blog pertama saya dengan node Js Ini adalah blog pertama saya dengan node Js Ini adalah blog pertama saya dengan node Js ',
    blog_deleted: '0000-00-00 00:00:00' },
  RowDataPacket {
    blog_id: 2,
    blog_title: 'Belajar Node JS',
    blog_sub_title: 'Belajar Node Js Untuk Pemula',
    blog_slug: 'belajar-node-js-untuk-pemula',
    blog_image: 'https://camo.githubusercontent.com/b6ba9075a54c192efc59bba53c92e7c23ec8cfe8/68747470733a2f2f63646e2e7261776769742e636f6d2f67696c626172626172612f6c6f676f732f653762316463323636366333646162653663313237366162643061373637623665626436616634332f6c6f676f732f6e6f64656a732d69636f6e2e737667',
    blog_text: 'Ini adalah blog pertama saya dengan node Js Ini adalah blog pertama saya dengan node Js Ini adalah blog pertama saya dengan node Js Ini adalah blog pertama saya dengan node Js Ini adalah blog pertama saya dengan node Js ',
    blog_deleted: '0000-00-00 00:00:00' } ]

ini yang saya ubah di fungsinya

 module.exports = {
  content: function(){
    connection.query("SELECT * FROM blog;",function(error,results,fields){
      if(!!error){
        console.log('kaga konek');
      }else{
        console.log(results);
      }
    });
  }
}
avatar Saputroandhi
@Saputroandhi

509 Kontribusi 162 Poin

Diperbarui 6 tahun yang lalu

2 Jawaban:

Agan modul koneksinya pakai apa? Modul asli mysql?

Coba pakai promise atau callback gan. Javascript beda dengan PHP, javascript sifatnya nonblocking jadi pada saat console.log hasilnya belum keluar. Dan javascript ga bisa 'menunggu' hasil kecuali pakai promise atau callback.

avatar rachmatsasongko
@rachmatsasongko

410 Kontribusi 426 Poin

Dipost 6 tahun yang lalu

Emang kagak bisa, soalnya kamu return di dalam fungsi connection.query(). Karena JS itu sifatnya asynchronous, maka mau nggak mau kamu harus bikin sebuah callback.

module.exports = {
  content: function(){
    connection.query("SELECT * FROM blog;",function(error,results,fields){
      if(!!error){
        console.log('kaga konek');
      }else{
        return results; // Return ini di dalam fungsi connection.query()
      }
    });

    // Kalau mau mengembalikan return ke fungsi yang kamu panggil, return harusnya ada di sini.
    // Misal.
    return 'Data ditemukan';
  }
}

Nah, kamu harus bikin fungsi callback agar bisa mereturn hasil query kamu, contoh:

module.exports = {
  content: function(callback){
    connection.query("SELECT * FROM blog;",function(error,results,fields){
      if(!!error){
        callback(err);
      }else{
        callback(null, result);
      }
    });
  }
}

avatar dalikewara
@dalikewara

351 Kontribusi 260 Poin

Dipost 6 tahun yang lalu

Login untuk ikut Jawaban