使用模块导出传递对象

时间:2017-04-18 15:42:58

标签: javascript mysql node.js

我仍然是nodejs和Javascript的新手,如果我的问题看起来很简单,我很抱歉,但我很挣扎,我似乎无法在网上找到答案。

我想要做的是基本上调用一个脚本(sqlRequest.js)并在调用它时发送一个整数。该脚本将向我的数据库发送一个sql请求,并将结果(一个对象)返回到原始文件。

以下是代码:

router.post('/request', function(req, res, next){
var id = req.body.id;
var essai = require('./sqlRequest.js');

console.log("INDEX: "+essai.sendSQL(id));    });

现在是sqlRequest.js代码:

exports.sendSQL = function(id) {    
var mysql= require('mysql');
    var connection = mysql.createConnection({
    host     : 'localhost',
    user     : 'bcombes',
    password : 'bertrand1994',
    database : 'totalkpi'
    });
    connection.connect();
    var sql ="SELECT * FROM tra_ticket where id=?";
    var insert=[id];
    sql=mysql.format(sql, insert);

    connection.query(sql, function(err, rows, fields) {
        if (err) {
            console.log('Error while performing Query.');
            connection.end();
        }
        else {
            connection.end();
            console.log(rows);
            return rows;
        }
    });};

在控制台上我可以看到console.log(" INDEX:" + essai.sendSQL(id));似乎未定义,并显示在console.log(行)之前。

服务器是否有可能不等待函数完成并显示变量?

无论如何,谢谢你抽出时间帮忙。

1 个答案:

答案 0 :(得分:0)

你在文件之间传递变量的逻辑很好。您看到essai.sendSQL(id)返回undefined的原因是因为connection.query(...)是异步调用的,正如您在问题中提到的那样,console.log会在数据库查询完成之前触发。< / p>

要解决该问题,您只需稍微重构一下代码:

var essai = require('./sqlRequest.js');

router.post('/request', function(req, res, next){
    var id = req.body.id;
    // send callback to sendSQL
    essai.sendSQL(id, function(index) {
        // this will only fire once the callback has been called
        console.log("INDEX: " + index)
    })
});

然后在sqlRequest.js中:

exports.sendSQL = function (id, cb) {
    var mysql = require('mysql');
    var connection = mysql.createConnection({
        host: 'localhost',
        user: 'bcombes',
        password: 'bertrand1994',
        database: 'totalkpi'
    });
    connection.connect();
    var sql = "SELECT * FROM tra_ticket where id=?";
    var insert = [id];
    sql = mysql.format(sql, insert);

    connection.query(sql, function (err, rows, fields) {
        if (err) {
            console.log('Error while performing Query.');
            connection.end();
        }
        else {
            connection.end();
            console.log(rows);
            // call the callback
            cb(rows);
        }
    });
};