javascript - 返回 null mysql nodejs

标签 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 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 数据库的完整对象,但是当我在 paths.js 文件上调用它作为 var x it null 时,我真的不明白我实际上如何克服这个问题。是的,我是 NodeJs 的新学生

谢谢。

最佳答案

您无法从同步函数内的异步调用返回。相反,您需要将回调传递给 get_user(),如下所示:

dbfn.js

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(cb){
        db.query('SELECT * FROM users',function(err,results,fields){
            if(err){
                console.log(err)
                cb(err);
            }
            if(results){
                console.log(results);
                cb(null, 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){

        db.get_user(function(err, response) {
            if(err) {
                // handle error
            }
            else {
                var x = response;
                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);
    });
}

现在,回调中的代码仅在数据库查询完成后才会触发。

关于javascript - 返回 null mysql nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44390041/

相关文章:

javascript - 过滤元素,如果没有结果显示这个

php - 如何将我的 session 数组存储到我的数据库中

node.js - 包括存储库中不存在的文件

javascript - 单击按钮后添加新输入

javascript - 在创建 Promise 对象期间将哪些值传递给执行程序

javascript - 切换div并更改属性源的Jquery函数

php - 如何使用 PHP/MySQL 搜索其他变量的特定内容?

php - 检查 mySQL/PHP 条目是否存在而不会超时?

Javascript:在方法内部调用方法本身(使用原始参数)

node.js - async.series 的简单实现是什么?