简体   繁体   English

从节点js中的单独文件获取回调

[英]get a callback from a seperate file in node js

I have two file in my node js app server.js and database.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)    
});

and

//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")
  }
};

I need a callback from the insertUser function in database.js so i can call a res.end("data inserted"). 我需要从database.js中的insertUser函数进行回调,以便可以调用res.end(“插入数据”)。 however it seems con.query is going async, hence I am getting a blank value when I try to log result in server.js from get/insertuser in server.js 但是,似乎con.query会异步运行,因此当我尝试从server.js中的get / insertuser将结果记录到server.js中时,我得到了一个空白值

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

Use promises. 用诺言。 Either native or from a library. 本机或来自库。

Here's how you could do it with a promise: 这是您可以兑现承诺的方法:

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);
        });
    });
},

Then you can use it your other file like this: 然后,您可以将其用作其他文件,如下所示:

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

in your server js do 在您的服务器js中

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

and in your database do 并在您的数据库中

 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") } }; 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM