Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 返回null mysql nodejs_Javascript_Mysql_Node.js_Express - Fatal编程技术网

Javascript 返回null mysql nodejs

Javascript 返回null mysql nodejs,javascript,mysql,node.js,express,Javascript,Mysql,Node.js,Express,请查看dbfn.js文件 /*database function file;*/ var db = require('./connection'); function check_conn(){ if(db){ console.log('We are connected to Database server'.bgGreen); return true; }else{ console.log('We are not connec

请查看dbfn.js文件

/*database function file;*/

var db = require('./connection');

function check_conn(){
    if(db){
        console.log('We are connected to Database server'.bgGreen);
        return true;
    }else{
        console.log('We are not connected to DataBase server'.bgRed);
        return false;
    }
}

module.exports = {

    testCon : function(){
        if(check_conn() === true){
            return 'We are connected to DB';
        }else return 'We are not connected to DB';
    },

    get_user : function(){
        db.query('SELECT * FROM users',function(err,results,fields){
            if(err){
                console.log(err)
                return err;
            }
            if(results){
                console.log(results);
                return results;
            }
            console.log('nothing...');
        });
    }
};
现在,看看routes.js文件

var db = require('./dbfn');

module.exports = function(app){

    /*
        Routing starts here
    */

    //root route
    app.get('/', function(req, res){
        res.render('index.ejs');
    });

    //test route
    app.get('/test',function(req,res){

        var x = db.get_user();
        console.log(x);
        res.writeHead(200, {'Content-Type': 'text/json'});
        res.json(x);
    });



    //default it should stay at bottom
    app.get('*',function (req, res) {
        //res.redirect('/');
        res.send(404);
    });
}
dbfn文件上的console.log从MySQL数据库中写入完整对象,但当我在routes.js文件中将其称为var x it null时,我真的不明白我究竟如何克服这个问题。是的,我是NodeJs的新学生


谢谢。

您不能从同步函数中的异步调用返回。相反,您需要通过一个回调来获取用户,如下所示:

dbfn.js

routes.js


现在,回调中的代码只会在DB查询完成后触发。

使用回调更新查询函数:

get_user : function(callback){
        db.query('SELECT * FROM users',function(err,results,fields){
            if(err){
                console.log(err)
                callback(err);
            }
            if(results){
                console.log(results);
                callback(results;
            }
            console.log('nothing...');
        });
    }
然后在路由中的下一步检查回调函数中的结果

app.get('/test',function(req,res){

        db.get_user(function(result){
         console.log(result);
     });
 });

nodejs是异步的。因此,您需要向该方法传递一些回调,或者使用承诺获取结果。var x=db.get\u用户;在这段代码中,db仍将执行&在这种情况下,您将无法定义nice one,我完全没有理解异步和同步函数,但正如您所看到的,我们必须检查两次该响应和各种数据的错误,我能为代码想出一些好的或任何好的实践吗?@VishalPatel没问题!如果您希望避免回调并使用另一种方法,那么值得研究JavaScript承诺。
get_user : function(callback){
        db.query('SELECT * FROM users',function(err,results,fields){
            if(err){
                console.log(err)
                callback(err);
            }
            if(results){
                console.log(results);
                callback(results;
            }
            console.log('nothing...');
        });
    }
app.get('/test',function(req,res){

        db.get_user(function(result){
         console.log(result);
     });
 });