2017-09-27 3 views
0

Ich habe zwei Datei in meinem Knoten js app server.js und database.jserhält einen Rückruf von einer separaten Datei in Knoten js

//server.js 
var db = require('./database.js'); 

var express = require('express'); 
var app = express(); 

var server = app.listen(8081, '000.00.00.000',function(){ 
    var host = server.address().address; 
    var port = server.address().port 

    console.log('App listening'); 

}) 


app.get('/',function(req,res){ 
    res.end("Hello Jamian"); 
}) 


app.get('/insertuser',function(req,res){ 
    console.log("insert user called") 

    var result = new db.insertUser(); 
    console.log("result " + result)  
}); 

und

//database.js 
var mysql = require('mysql'); 

var con = mysql.createConnection({ 
    host:"localhost", 
    user:"0000", 
    password:"0000", 
    database: "aaaa" 
}); 

con.connect(function(err){ 
    if(err) throw err; 
    console.log("DB Connected"); 
}); 

module.exports = { 
    insertUser: function() { 

    console.log("module exported"); 

    var SQL_insert_user = "insert into users(username,useremail,usermobile,userpassword,activetoken) values('darren','[email protected]','980000000','password','ASKDO5615F')"; 
    con.query(SQL_insert_user,function(err,result){ 
     if(err) throw err; 

     console.log("data inserted"); 

     return result; 
    }); 
    }, 
    bar: function() { 
    console.log("bar called") 
    } 
}; 

Ich brauche einen Rückruf vom insert Funktion in der Datenbank .js, so kann ich ein res.end ("Daten eingefügt") aufrufen. jedoch scheint es con.query wird async, daher bin ich einen leeren Wert bekommen, wenn ich versuche, in server.js von get/insert in server.js führen loggt

data inserted 
insert user called 
module exported 
result {} 
data inserted 
+2

Mögliche Duplikat [Wie kann ich die Antwort ein Rück asynchroner Anruf?] (https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –

+1

Sie müssen einen Rückruf oder Versprechen verwenden. –

Antwort

0

in Ihrem Server js tun

app.get('/insertuser',function(req,res){ 
 
    console.log("insert user called") 
 

 
    var result = new db.insertUser(function(result) { 
 
     console.log("result " + result) 
 
    }); 
 
     
 
});

und in Ihrer Datenbank tun

module.exports = { 
 
    insertUser: function (cb) { 
 

 
    console.log("module exported"); 
 

 
    var SQL_insert_user = "insert into users(username,useremail,usermobile,userpassword,activetoken) values('darren','[email protected]','980000000','password','ASKDO5615F')"; 
 
    con.query(SQL_insert_user,function(err,result){ 
 
     if(err) throw err; 
 

 
     console.log("data inserted"); 
 
     cb(result); 
 

 
    }); 
 
    }, 
 
    bar: function() { 
 
    console.log("bar called") 
 
    } 
 
};

+0

Ausgezeichnet. Genau das habe ich gesucht – jamian

1

Verwenden Sie Versprechungen. Entweder nativ oder aus einer Bibliothek.

Hier ist, wie Sie es mit einem Versprechen tun könnte:

insertUser: function(){ 
    return new Promise(function(reject, resolve){ 
     var SQL_insert_user = "insert into users(username,useremail,usermobile,userpassword,activetoken) values('darren','[email protected]','980000000','password','ASKDO5615F')"; 
     con.query(SQL_insert_user,function(err,result){ 
      if(err) reject(err); 
      else resolve(result); 
     }); 
    }); 
}, 

Dann können Sie es Ihre andere Datei wie folgt verwendet werden:

insertUser() 
.then(function(result){ 
    // do something with the result 
}) 
.catch(function(err){ 
    // Oh no! there was an error! 
}); 
Verwandte Themen