【问题标题】:Async Node JS query connection异步节点 JS 查询连接
【发布时间】:2017-12-28 20:59:23
【问题描述】:

我正在尝试使用 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'));
   });
 });
 });
 });

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

TypeError: Cannot read property '1' of undefined

我相信它是异步的东西

【问题讨论】:

  • 你在哪里使用异步?你确定不是sheet.set(1, ...这行错误的原因吗?可以贴一下异常的调用栈吗?
  • 错误可以在这里看到:pastebin.com/gKpBvUQx 但本质上,如果我要在没有 for 循环的情况下运行这段代码,它会完美运行。

标签: mysql node.js excel async.js


【解决方案1】:

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

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

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

【讨论】:

  • 更改为 unlinkSync 导致应用程序错误输出错误:ENOENT: no such file or directory, unlink 所以我不认为这导致了错误,因为 unlink 实际工作并在抛出错误时捕获了错误。可以在这里看到错误:pastebin.com/gKpBvUQx 但本质上,如果我要在没有 for 循环的情况下运行这段代码,它会完美运行。
  • 实际上,这可能是您的根本原因:unlinkSyncunlink 完全相同。如果删除文件失败,则表示该文件不存在。在尝试删除之前检查它是否存在。
【解决方案2】:

所以错误是由于初始设置错误。基本上,createWorkbook 具有初始的行数和列数,如果您碰巧尝试写入的值超出了您最初创建的范围,则会引发错误。因此,为什么我的 for 循环不断崩溃。

【讨论】:

    猜你喜欢
    • 2014-02-13
    • 2014-08-05
    • 2020-03-30
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多