我还处于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都可以。