簡體   English   中英

Node.js mysql查詢傳遞給async.waterfall中的下一個函數

[英]Node.js mysql query passing to next function in async.waterfall

我使用express在node.js中有一些代碼。 我路由一個調用來請求來自mysql數據庫的數據,我想要做的是將它傳遞給另一個函數,將表格形式(表查詢)返回的json重構為層次結構類型json。

我已經單獨測試了腳本來重構我的sql查詢的輸出。 但是,我無法將其從查詢函數傳遞到我的新腳本(函數)

我只是沒有看到我做錯了什么。 請幫忙,謝謝。

exports.get_site_menu = function (req, res) {
    var dbc;
    console.log('In menu setup');
    async.waterfall([
        // get a connection

        function (callback) {
            db.db(callback);
        }

        ,
        querylookup, modifyjson
    ], completed);

    function querylookup(dbclient, res) {
        dbc = dbclient;
        dbc.query("SELECT categories, " +
            "subcategories, " +
            "pid, " +
            "title, " +
            "description " +
            "FROM MENU_SELECT_ACTIVE_VIEW " +
            "where company_id = ? and site_id = ?", [req.query.companyid, req.query.siteid], res);
    }

    function modifyjson(err, res) {

        categories = [];

        console.log('results ' + res);

        res.forEach(function (entry) {
            var cindex = categories.map(function (category) {
                return category.name;
            }).indexOf(entry.categories);

            console.log(cindex);
            if (cindex < 0) {
                // Not found in categories array
                cindex = categories.push({
                    name: entry.categories,
                    subcategories: []
                }) - 1; // -1 to fix the index
            }
            // Lets search the subcategory
            var category = categories[cindex];

            var sindex = category.subcategories.map(
                function (subcategory) {
                    return subcategory.name;
                }
            ).indexOf(entry.subcategories);

            if (sindex < 0) {
                // Not Found
                sindex = category.subcategories.push({
                    name: entry.subcategories,
                    items: []
                }) - 1;
            }
            // Subcategory exists. Just push
            category.subcategories[sindex].items.push({
                pid: entry.pid,
                description: entry.description,
                title: entry.title
            });
        });

        menu = {
            menu: {
                categories: categories
            }
        };
        console.log('menu ' + menu);
    }


    function completed(err, menu, fields) {
        if (dbc) dbc.end();
        if (err) {
            callback(err);
        } else {
            console.log(menu);
            res.contentType('json');
            res.send(JSON.stringify(menu));
        }
    }
};

您需要將每個結果傳遞給自己的回調以傳遞下一個函數。 我已經重構了你的代碼;

exports.get_site_menu = function (req, res) {
    var dbc;
    console.log('In menu setup');
    async.waterfall([
        // get a connection

        function (callback) {
            db.db(callback, some_result);
        },
        function querylookup(dbclient, res, callback) {
            dbc = dbclient;
            dbc.query("SELECT categories, " +
                "subcategories, " +
                "pid, " +
                "title, " +
                "description " +
                "FROM MENU_SELECT_ACTIVE_VIEW " +
                "where company_id = ? and site_id = ?", [req.query.companyid, req.query.siteid], res);
                callback(null, result_from_queryLookup);
        },
        function modifyjson(err, res, callback) {

            categories = [];

            console.log('results ' + res);

            res.forEach(function (entry) {
                var cindex = categories.map(function (category) {
                    return category.name;
                }).indexOf(entry.categories);

                console.log(cindex);
                if (cindex < 0) {
                    // Not found in categories array
                    cindex = categories.push({
                        name: entry.categories,
                        subcategories: []
                    }) - 1; // -1 to fix the index
                }
                // Lets search the subcategory
                var category = categories[cindex];

                var sindex = category.subcategories.map(
                    function (subcategory) {
                        return subcategory.name;
                    }
                ).indexOf(entry.subcategories);

                if (sindex < 0) {
                    // Not Found
                    sindex = category.subcategories.push({
                        name: entry.subcategories,
                        items: []
                    }) - 1;
                }
                // Subcategory exists. Just push
                category.subcategories[sindex].items.push({
                    pid: entry.pid,
                    description: entry.description,
                    title: entry.title
                });
            });

            menu = {
                menu: {
                    categories: categories
                }
            };
            console.log('menu ' + menu);
            callback(null, menu, fields);
        }
    ], function completed(err, menu, fields) {
        if (dbc) dbc.end();
        if (err) {
            callback(err);
        } else {
            console.log(menu);
            res.contentType('json');
            res.send(JSON.stringify(menu));
        }
    });
};

特別是要小心回調部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM