javascript - 如何处理未处理的拒绝SequelizeConnectionError : connect ETIMEDOUT

标签 javascript mysql node.js sequelize.js papaparse

以下代码是一个项目,它解析 CSV 文件的目录以输入到 MySQL 数据库中。它通常有效,但是我受到 ETIMEDOUT 错误的困扰。我是一名初级开发人员,不确定如何处理这种情况,或者为什么会发生这种情况。可能是因为我一次解析太多信息。任何有关如何处理此问题的建议将不胜感激。

const app = require('express')();
var fs = require('fs');
var Papa = require('papaparse');
var Sequelize = require('sequelize');
var _ = require('underscore');
var mainDirectory = ['./Relay-Data'];

var sequelize = new Sequelize('relay_cloud','root','admin',{
  host: 'localhost',
  dialect: 'mysql',
  logging: false,
    pool: {
     max: 5,
     min: 0,
     idle: 50000,
     acquire: 50000,
     evict: 50000,
     handleDisconnects: true
 }
});

var Relay = sequelize.define('relay',{
  Timestamp:{
    type: Sequelize.DATE,
    field: 'Timestamp',
  },
  Identifier:{
    type: Sequelize.INTEGER,
    field: 'Identifier',
  },
  Building:{
    type: Sequelize.STRING,
    field: 'Building',
  },
  Device_Type:{
    type: Sequelize.STRING,
    field: 'Device_Type'
  },
  Unit:{
    type: Sequelize.STRING,
    field: 'Unit'
  },
  Energy:{
    type: Sequelize.DECIMAL,
    field: 'Energy'
  },
  Volume:{
    type: Sequelize.DECIMAL,
    field: 'Volume'
  },
  File_Name:{
    type: Sequelize.STRING,
    field: 'File_Name'
  }
},{
  timestamps: false,
  freezeTableName: true
});

Promise.all(mainDirectory.map(function(main) {
  return new Promise(function(resolve, reject) {
        fs.readdir(main, function(er,dirs){
            if (er) {
                return reject(er);
            }
            for(var i = 0; i < dirs.length; i++){
                dirs[i] = mainDirectory + "/" + dirs[i];
            }
            resolve(dirs);
        });
  }).then(function(dirs){
        return Promise.all(dirs.map(function(dir) {
          return new Promise(function(resolve, reject) {
            fs.readdir(dir, function(er, files) {
              if (er) {
                return reject(er);
              }
              resolve(files);
            });
          }).then(function(files) {
            return Promise.all(files.map(function(file) {
              return new Promise(function(resolve, reject) {
                fs.readFile(dir + '/' + file, 'utf-8', function(er, content) {
                  if (er) {
                    return reject(er);
                  }
                            var data_obj = Papa.parse(content,{
                                    quotes: false,
                                    delimiter: ";",
                                });
                                data_array = data_obj.data;
                                output_data_array = [];

                                for(var i = 10; i < data_array.length; i++){
                                    if(data_array[i][0] !== "" ){
                                        output_data_array.push({
                                                "Timestamp"     : data_array[i][0],
                                                "Identifier"    : data_array[i][1],
                                                "Building"      : file.split( "_" )[ 1 ],
                                                "Device_Type" : data_array[i][3],
                                                "Unit"          : data_array[i][5],
                                                "Energy"        : parseFloat(data_array[i][11].replace(',','.').replace(' ', '')) || 0 ,
                                                "Volume"    : parseFloat(data_array[i][13].replace(',','.').replace(' ', '')) || 0,
                                                "File_Name" : file
                                        });
                                    }
                                }
                        Relay.bulkCreate(output_data_array);
                    });
                resolve();
              });
            }));
          });
        }));
    });
})).catch(function(er) {
  console.log(er);
});



app.listen(process.env.PORT || 3000, process.env.IP, function(){
    console.log("Server is listening");
})

最佳答案

我能够通过执行以下操作来防止 ETIMEDOUT 错误:

setTimeout(function() {
            Relay.bulkCreate(output_data_array);
          }, 2);

关于javascript - 如何处理未处理的拒绝SequelizeConnectionError : connect ETIMEDOUT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47815702/

相关文章:

javascript - 如何选择与另一个有一定关系的某个表格单元格?

javascript - 在 AngularJS 中,$scope 变量值无法在 $http 成功回调之外访问

javascript - 使用 Emotion.sh 从样式组件传递 Prop

java - 无法使用 JDBC 驱动程序连接到 PostgreSQL

mysql - 通过添加到字符串中间来更新 mysql 中的列?

node.js - Node.js (Express) 中的 res.redirect 问题

javascript - 在多个文件中需要库的正确方法

mysql - 如何将 rSyslog 连接到 SQL 数据库?

javascript - 从 JS 中的构造函数返回 this

javascript - 在 Node 的对象中使用 'this' ?