同步MySQL和快速服务器

时间:2017-03-07 08:23:11

标签: node.js

这是我对NodeJS的第一次挑战,我认为我对所有回调和异步内容都有点迷失。

我有一台服务器,使用express并希望其中一个请求将查询数据库并返回结果。

使用任何其他语言,我会写一个这样做的函数,返回值,一切都会很好。 我的代码看起来像这样:

function queryDB(daysAgo){
    var connection = mysql.createConnection({
     host: "dbadress.com",
     user: "dbuser",
     password: "dbpassword",
     database: "db"
 });
    var returnValue;

    sqlQuery = "select * from db.database where time_created > now() - interval " + daysAgo + " day"
    connection.query(sqlQuery, function(error, results, fields){
       if (error) throw error;
        returnValue= results[0];
    });
    return returnValue;

}

app.get('/', function (req, res){
    var daysAgo = req.query.days_ago;
    var returnValue = queryMICE(daysAgo);
    res.send("Days Ago: '+ daysAgo + '\nTargeted URL: ' + returnValue);
});

当然返回undefined因为queryDB函数不同步。

很高兴得到关于NodeJS中回调的简短介绍,并举例说明如何编写此回调以返回查询值。

提前致谢!

1 个答案:

答案 0 :(得分:1)

不是让 queryDB 返回值,而是将回调函数传递给接收返回值的函数,如下所示:

function queryDB(daysAgo, callback) {
    var connection = mysql.createConnection({
        host: "dbadress.com",
        user: "dbuser",
        password: "dbpassword",
        database: "db"
    });

    sqlQuery = "select * from db.database where time_created > now() - interval " + daysAgo + " day";
    connection.query(sqlQuery, function (error, results, fields) {
        if (error) {
            throw error;
        }
        callback(results[0]);
    });
}

app.get('/', function (req, res) {
    var daysAgo = req.query.days_ago;
    queryDB(daysAgo, returnValue => res.send("Days Ago: " + daysAgo + '\nTargeted URL: ' + returnValue));
});

作为旁注:通过连接请求参数来创建SQL查询是 extremeley dangerous 。你应该从不在生产中使用这样的代码,但这是另一个故事。谷歌为“SQL注入”了解更多信息。