在node.js

时间:2017-10-27 12:53:34

标签: javascript mysql node.js excel asynchronous

我还处于Node.js的学习阶段,我有一个场景在

我在mysql 类别子类别中有3个表,其中包含所有行的名称和ID。

现在,每个文件夹中都有文件夹列表和一些.xlsx文件,每个.xlsx文件中都有一些页面

其中foldername是类别表中的类别名称

.xlsx filename是子类别表中的子类别名称 每个.xlsx文件中的工作表名称是项目表中的项目名称

我想要做的是我需要遍历每个文件夹,文件和工作表,然后创建一个Id的映射表。

到目前为止我的代码:

const fs = require('fs');
const path = require('path');
const xlsx = require('node-xlsx').default;
const mysql = require('mysql');
const connection = require('./db-connection.js');

var categoryMapping = () => {

//directory of all files
var mainDirectory = `${__dirname}/xlsx/final_data`;

//reading mainDirectory
fs.readdir(mainDirectory, function(err, files) {

    if (err) {
        console.error("Could not list the directory.", err);
        process.exit(1);
    }

    files.forEach(function(file, index) {

        //taking the folder name and getting the id of that name
        var sql = 'SELECT xxx FROM xxx WHERE xxx = ' + mysql.escape(file);

        connection.query(sql, function(error, result) {
            if (error) {
                console.log(error);
            }

            if (result.length > 0) {
                console.log('cat id:', result[0].CategoryId);
            } else {
                //fs.appendFile('category.log',`${file} not present in xxx table` + '\n');
                console.log(`${file} not present in xxx table`);
            }
        });

        //directory of .xlxs files
        var subCategoryDirectory = path.join(mainDirectory, file);

        fs.readdir(subCategoryDirectory, function(err, sheets) {

            if (err) {
                console.error("Could not list the directory.", err);
                process.exit(1);
            }

            sheets.forEach(function(sheet, index) {

                //taking the file name and getting the id of that name
                var filename = path.parse(sheet).name;

                var sql = 'SELECT xxx FROM xxx WHERE xxx = ' + mysql.escape(filename);

                connection.query(sql, function(error, result) {
                    if (error) {
                        console.log(error);
                    }
                    if (result.length > 0) {
                        console.log('sub cat id:', result[0].SubCategoryId);
                    } else {
                        //fs.appendFile('sub-category.log', `${filename} in ${subCategoryDirectory} not present in xxx table` + '\n');
                        console.log(`${filename} not present in xxx table`);
                    }
                });

                //individual .xlxs file path
                var sheetpath = path.join(subCategoryDirectory, sheet);

                const fileData = xlsx.parse(sheetpath);

                fileData.forEach(function(page, index) {

                    //taking the sheet name and getting the id of that name
                    var itemName = page.name;
                    var sql = 'SELECT SaltId FROM master_ddb_salts WHERE SaltName = ' + mysql.escape(itemName);

                    connection.query(sql, function(error, result) {
                        if (error) {
                            console.log(error);
                        }
                        if (result.length > 0) {
                            console.log('item id:', JSON.stringify(result[0].ItemId));
                        } else {
                            //fs.appendFile('salts.log', `${itemName} of ${sheetpath} not present in salt-master table` + '\n');
                            console.log(`${itemName} not present in xxx table`);
                        }
                    });

                    //maybe here I need to enter all categoryId, subCategoryId and itemId to mapping table 

                });
            });
        });
    });
});
};

categoryMapping();

到目前为止,我的代码正确地为我提供了所有ID。

我知道承诺的基本用法,但我不知道如何在这里实现它。

有人可以解释我如何在这里使用Promises或Callbacks? 任何更好的解决方案,比如使用Q,蓝鸟或异步等npm pakages都可以。

0 个答案:

没有答案