Async Node JS查询连接

时间:2017-07-23 01:50:23

标签: mysql node.js excel async.js

我正在尝试使用excelbuilder创建一个excel工作簿,并使用来自mysql数据库的信息填充数据。这是我的get方法:

 app.get('/excel', function(req, res) {

var locationSpread = ['location1.xlsx', 'location2.xlsx', 
'location3.xlsx'];

locationSpread.forEach(function(filename) {
 fs.unlink("./Spreadsheets/" + filename, (err) => {
   if (err) {
     console.log('Spreadsheet ' + filename + ' not found');
   } else {
     console.log('Spreadsheet ' + filename + ' successfully found');
   }
 });

 var query = connection.query('SELECT * from ' + filename.slice(0, -5), function(err, rows) {

   var workbook = excelbuilder.createWorkbook('./Spreadsheets/', filename);
   var sheet = workbook.createSheet(filename.slice(0, -5), 3, rows.length);
   sheet.set(1, 1, 'First Name');
   sheet.set(2, 1, 'Last Name');
   sheet.set(3, 1, 'Company');

   *** TROUBLE CODE START HERE ***
   for (var j = 2, z = 0; z < rows.length; j++, z++) {
     sheet.set(1, j, rows[z].firstName);
     sheet.set(2, j, rows[z].lastName);
     sheet.set(3, j, rows[z].company);
   }
   *** TROUBLE CODE END HERE ***

   workbook.save(function(err) {
     console.log('workbook saved ' + (err ? 'failed' : 'ok'));
   });
 });
 });
 });

我要做的第一件事是删除文件夹Spreadsheets中存在的文件。然后我根据位置查询数据库。我创建一个新的工作簿和工作表然后写入它。 for循环打破了程序,错误是:

TypeError: Cannot read property '1' of undefined

我认为这是异步

的内容

2 个答案:

答案 0 :(得分:0)

我在这里看到的一个可能的错误是您正在使用unlink的异步版本。可能,如果在尝试创建工作簿时未删除该文件,则可能会发生错误。

您可以尝试切换到unlinkSync并在创建工作表之前验证workbook对象不为空(并且作为额外的预防措施,在设置值之前sheet对象不为null )。

除此之外,如果没有错误堆叠,就无法进一步提供帮助。

答案 1 :(得分:0)

因此错误是由于初始设置错误。基本上,createWorkbook具有初始的行数和列数,如果您碰巧尝试写出超出最初创建的值的值,则会抛出错误。因此,为什么我的for循环继续崩溃。