nodejs mysql查询只显示一条记录而不是数据库中的所有记录

时间:2018-05-29 23:06:22

标签: mysql node.js

尝试使用节点js从名为 post 的表中检索所有数据库记录,但问题是只检索了一条记录而不是全部记录。 在php中,我可以使用 while() 循环遍历数据库记录以获取所有数据。

目前,我不知道如何整齐地遍历nodejs中的数据库以获取数据库中的所有记录。一些Stackoverflow学者建议使用await / async方法,但我不知道要在下面的代码上实现它以使其工作。有人可以帮我解决问题。

var connection = require('./config');
module.exports.getpost = function (req, res) {
   connection.query('SELECT * FROM posts', function (error, results, fields) {

        if (error) {
            console.log('error');
            res.json({
                status : false,
                message : 'there are some error with the query'

            });
        } else {
            var postid = results[0].id;
            var title = results[0].title;
            var content = results[0].content;
            var type = -1;
             console.log(title);

        // Checking user status
   connection.query('SELECT count(*) as cntStatus,type FROM like_table WHERE userid= ? and postid=?', [userid,postid], function (error, results, fields) {
         if (error) {
                    console.log('error');
                    res.json({
                        status : false,
                        message : 'there are some error with the query'

                    });
                } else {



                    var total_count = results[0].cntStatus;
 if(total_count > 0){
        type = results[0].type;

        }



                    var total_count = results[0].cntStatus;
                    var result = {



                        "id" : postid,
                        "title" : title,
                        "content" : content,
"type" : type,
"likes" : total_count
                    };

                    console.log('query okay');
                    res.json({
                        //data:results,
                        data : result

                    });
                }
            });
        }

    });
}

2 个答案:

答案 0 :(得分:0)

我假设你正在使用mysql npm。在那种情况下,我不确定你的问题是什么问题。结果param是select语句返回的行数组。因此,您可以使用循环来遍历所有行。

您实际上不需要使用async / await(在功能方面没有任何优势,但看起来更干净)。但是如果你想摆脱回调,你需要将连接查询包装成一个promise或者使用带有promise接口的mysql2 npm。以下是使用async / await而不是回调来迭代select中所有行的方法:

var connection = require('./config');
module.exports.getpost = async function (req, res) {
    try {
        const queryResult = await query('SELECT * FROM posts');
        queryResult.forEach(row => {
            console.log(row.title);
        })
    } catch (err) {
        console.log('error');
        res.json({
            status: false,
            message: 'there are some error with the query'
        });
    }
}

请注意,您需要使用nodejs 8来运行带有async / await的代码。

此外,您不需要在帖子查询中进行其他查询,您可以使用SQL连接合并这两个

答案 1 :(得分:0)

async waterfall - 运行一系列函数,每个函数将结果传递给数组中的下一个。但是,如果任何函数将错误传递给回调,则不执行下一个函数,并立即调用主回调并显示错误。

var connection = require('./config');
var async = require('async');
module.exports.getpost = function (req, res) {
    var arrayOfFuncs = [];
    var func_1 = function(callback) {

        connection.query('SELECT * FROM posts', function (error, results, fields) {
            if (error) {
                console.log('error');
                callback(error, null); 
            } else {
                var toPass = {};
                toPass.postid = results[0].id;
                toPass.title = results[0].title;
                toPass.content = results[0].content;
                toPass.type = -1;
                callback(null, toPass); 
            }
        })
    }
    arrayOfFuncs.push(func_1);

    var func_2 = function(prevData, callback) {
        connection.query('SELECT count(*) as cntStatus,type FROM like_table WHERE userid= ? and postid=?', [userid,prevData.postid], function (error, results, fields) {
         if (error) {
                    console.log('error');
                    callback(error, null); 
                } else {
                    var total_count = results[0].cntStatus;
                    if(total_count > 0){
                        type = results[0].type;
                    }
                    var total_count = results[0].cntStatus;
                    var result = {
                        "id" : postid,
                        "title" : title,
                        "content" : content,
                        "type" : type,
                        "likes" : total_count
                    };
                    console.log('query okay');
                    callback(null, result); 
                }
            });
    }
    arrayOfFuncs.push(func_2);

    async.waterfall(arrayOfFuncs, function(errString, finalResult) {
        if(errString) {
            return res.send(errString);
        } else {
            return res.send(finalResult);
        }
    });
}