Node.js mysql查询返回空数组

时间:2017-10-25 14:11:47

标签: javascript mysql node.js promise

我编写了node.js脚本,它的工作方式与预期不符。 这是我的js代码,它描述了mysql连接;

var mysql = require('mysql');
var createConnectionMYSQL;
var connectCount=0;
(createConnectionMYSQL = function () {
    con = mysql.createPool({
      connectionLimit:10,
      host: "*****",
      user: "*****",
      password: "********",
      database: "dbname"
});
      console.log(++connectCount);
})();
con.query("SET SESSION wait_timeout = 120");
con.query('set names utf8');
con.on('error', function (err) {
    if (err.code === 'PROTOCOL_CONNECTION_LOST') {  
        createConnectionMYSQL();                          
    } else {                                       
        throw err;                                  
    }
});

主函数返回我处理的承诺。

function getRecipes(str, page) {
    return new Promise(function (resolve, reject) {
        //unimportant code
        var sql = 'SELECT ID, Recept, MATCH (Recept) AGAINST ("+' + ingredients[0] + '*" IN BOOLEAN MODE) as REL FROM recipes WHERE (MATCH (Recept) AGAINST ("+' + ingredients[0] + '*" IN BOOLEAN MODE))>0 ORDER BY REL';
        if (page != 0) sql += ' LIMIT ' + (page * 12) + ' ,12';
        con.query(sql, function (err, result, fields) {
            if (err) return reject(err);
         //   console.log(result + ' ' + sql);
            resolve(result);
        });
    });

}

但是我得到了mysql模块的奇怪行为。在getRecipes(par1,0).then(function(results){})我得到第一个空数组,一分钟后我得到正常的数组,结果好像resolve()工作了两次。但这是幸运案例。有时我得到更多的空数组,然后预期数组会有结果。

1 个答案:

答案 0 :(得分:0)

我认为返回“拒绝”(错误)'是不必要的,但这不应该解释这种行为。

你是否在处理查询的同一个promise循环中有连接部分?那么首先你确认连接是否正常,然后你进行查询?如果没有,那么这可能会导致一些问题。

您是否已从数据库中检查过有多少请求?