【问题标题】:get a callback from a seperate file in node js从节点 js 中的单独文件获取回调
【发布时间】:2017-09-27 13:01:38
【问题描述】:

我的节点 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 中的 insertUser 函数回调,这样我就可以调用 res.end(“插入的数据”)。但是似乎 con.query 正在异步,因此当我尝试从 server.js 中的 get/insertuser 记录 server.js 的结果时,我得到一个空白值

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

【问题讨论】:

标签: javascript mysql node.js express


【解决方案1】:

使用承诺。本地或来自库。

你可以通过以下方式实现承诺:

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

【讨论】:

    【解决方案2】:

    在你的服务器 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")
      }
    };

    【讨论】:

    • 优秀。这正是我想要的
    猜你喜欢
    • 2021-10-17
    • 2020-11-22
    • 2020-12-12
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2021-04-26
    • 2011-06-08
    相关资源
    最近更新 更多