从Node JS中的单独文件中获取回调



我在节点JS应用中有两个文件server.jsdatabase.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)    
});

//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','darren@yahoo.in','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")
  }
};

我需要来自database.js中插入器函数的回调,以便我可以调用res.end("数据插入")。但是,似乎con.query正在异步,因此,当我尝试从server.js

中登录server/insertuser中的server.js时,我会得到一个空白的值。
data inserted
insert user called
module exported
result {}
data inserted

使用承诺。本地或来自图书馆。

这是您可以通过承诺做到的:

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

然后您可以这样使用其他文件:

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

在您的服务器JS中

app.get('/insertuser',function(req,res){
    console.log("insert user called")
    var result = new db.insertUser(function(result) {
        console.log("result " + result)   
    });
     
});

,在您的数据库中

module.exports = {
  insertUser: function (cb) {
    console.log("module exported");
    var SQL_insert_user = "insert into users(username,useremail,usermobile,userpassword,activetoken) values('darren','darren@yahoo.in','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")
  }
};

最新更新