Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node/MySQL-代码:';ER#u PARSE#u ERROR';,尝试插入约800条记录时_Javascript_Mysql_Node.js - Fatal编程技术网

Javascript Node/MySQL-代码:';ER#u PARSE#u ERROR';,尝试插入约800条记录时

Javascript Node/MySQL-代码:';ER#u PARSE#u ERROR';,尝试插入约800条记录时,javascript,mysql,node.js,Javascript,Mysql,Node.js,我正在研究一个小主意,从页面中收集错误并将其存储在数据库中,然后使用GraphAPI可视化地显示信息 共有8个站点,每个站点上有100个条目,因此每次有800个事务。 我对每个站点进行循环,然后对错误表进行子循环并收集它们 如果我对所有800个条目的每个子循环进行insert查询,我就可以工作了,但是我从这么多事务中得到了某种内存泄漏,几分钟后,由于内存过多,节点中断 所以我尝试将所有800个条目排队到数组数组中,然后在每次迭代结束时执行多重插入,但我得到了ER_PARSE_错误 var tab

我正在研究一个小主意,从页面中收集错误并将其存储在数据库中,然后使用GraphAPI可视化地显示信息

共有8个站点,每个站点上有100个条目,因此每次有800个事务。 我对每个站点进行循环,然后对错误表进行子循环并收集它们

如果我对所有800个条目的每个子循环进行insert查询,我就可以工作了,但是我从这么多事务中得到了某种内存泄漏,几分钟后,由于内存过多,节点中断

所以我尝试将所有800个条目排队到数组数组中,然后在每次迭代结束时执行多重插入,但我得到了ER_PARSE_错误

var tabletojson = require('tabletojson');
var mysql = require("mysql");
var striptag = require("striptags");
var fs = require("fs");
var path = require('path');

var startCollector;
var iterations = 0;
var insertions = 0;
var duplicated = 0;

var datas = [];

var clients = ["ClientA", "ClientB", "ClientC", "ClientD", "ClientE", "ClientF", "ClientG", "ClientH"];
var appDir = path.dirname(require.main.filename);

var errorList = ["err1", "err2", "err3", "err4", "err5", "err6"];

var con = mysql.createPool({
    host: "localhost",
    user: "User",
    password: "Password",
    database: "errors"
  });

function CollectErrors() {
    startCollector = new Date();
    for(var a = 0; a < clients.length; a++) {
        (function(a) {
            tabletojson.convertUrl("http://example.com" + clients[a] + "/page.php?limit=100", { stripHtmlFromCells: false }, function(response) {
            var rs = response[0];
                for(var l = rs.length-1; l > -1; l--) {
                    var newDate = formatDate(striptag(rs[l]["Date"]), striptag(rs[l]["Time"]));
                    var user = getUser(striptag(rs[l]["User"]));
                    var msg = striptag(rs[l]["Error"]);
                    var splitError = rs[l]["Error"].split("<a href=\"");
                    var link = getUrl(splitError[1]);
                    var id = getId(link);
                    var type = getType(striptag(splitError[0]));
                    var temp = [newDate, link, type, user, clients[a], id, msg];
                    datas.push(temp);
                }
                });
        })(a);
    }
    con.getConnection(function(err, connection) {
        connection.query("INSERT IGNORE INTO entries (time, url, type, author, client, uid, message) VALUES ?", [datas], function(err, rows) {
            console.log(err);
        });
        connection.release();
        datas = [];
    });
    setTimeout(CollectErrors, 10000);

}



function formatDate(date, time) {
    var newdate = date.split("/").reverse().join("-");
    var newtime = time+":00";
    return newdate + " " + newtime;
}

function getUrl(uri) {
    return "http://example.com/"+uri.split("\">Details")[0];
}

function getId(url) {
    return decodeURIComponent((new RegExp('[?|&]' + "id" + '=' + '([^&;]+?)(&|#|;|$)').exec(url) || [null, ''])[1].replace(/\+/g, '%20')) || null;
}

function getType(error) {
    for(var a = 0; a < errorList.length; a++) {
        if(error.indexOf(errorList[a]) !== -1) {
            return errorList[a];
        }
    }
    return "Other";
}

function getUser(user) {
    if(user == "" || user == "&#xA0;" || user == null) {
        return "System";
    }
    return user;
}


CollectErrors();
var tabletojson=require('tabletojson');
var mysql=require(“mysql”);
var striptag=需要(“striptag”);
var fs=要求(“fs”);
var path=require('path');
无功启动采集器;
var迭代次数=0;
var插入=0;
重复变量=0;
var数据=[];
客户变量=[“客户A”、“客户B”、“客户C”、“客户D”、“客户E”、“客户F”、“客户G”、“客户T”];
var appDir=path.dirname(require.main.filename);
var errorList=[“err1”、“err2”、“err3”、“err4”、“err5”、“err6”];
var con=mysql.createPool({
主机:“本地主机”,
用户:“用户”,
密码:“密码”,
数据库:“错误”
});
函数collectorerrors(){
startCollector=新日期();
对于(var a=0;a-1;l--){
var newDate=formatDate(striptag(rs[l][“Date”])、striptag(rs[l][“Time”]);
var user=getUser(striptag(rs[l][“user”]);
var msg=striptag(rs[l][“Error”]);
var splitError=rs[l][“Error”]。拆分(“详细信息”)[0];
}
函数getId(url){
返回decodeURIComponent((新的RegExp('[?&]'+“id”+'='+'([^&]+?)(&&| | | | | | | | | | | | | | | | | | | | | | | | | | |;
}
函数getType(错误){
对于(var a=0;a
我也尝试过mysql.createConnection,但这也给了我同样的问题


我已经被困了12个小时,我看不出有什么问题,我甚至试着用字符串填充数据表,但也出现了同样的错误。

我已经更改了您的代码,以使用ES6和正确的模块功能。
有用的链接:,正确

const tabletojson=require('tabletojson'),
mysql=require(“mysql”),
striptag=需要(“striptag”),
fs=要求(“fs”),
路径=要求(“路径”);
常数星采集器,
迭代次数=0,
插入=0,
重复=0;
设datas=[];
const clients=[“ClientA”、“ClientB”、“ClientC”、“ClientD”、“ClientE”、“ClientF”、“ClientG”、“ClientH”];
const appDir=path.dirname(require.main.filename);
常量错误列表=[“err1”、“err2”、“err3”、“err4”、“err5”、“err6”];
const con=mysql.createPool({
主机:“本地主机”,
用户:“用户”,
密码:“密码”,
数据库:“错误”
});
//我们将使用ES6中的异步/等待
const collectErrors=async()=>{
//到目前为止,我只将语法更改为ES6
让startCollector=新日期();
//我们将尝试遍历每个客户机。我们在这里使用..的语法来允许我们使用wait
for(让客户选择客户){
//请检查客户机值是否返回正确的数据。如果没有,请将for..of更改为for..each,将客户机变量更改为客户机[a]
const tbj=wait tabletojson.convertUrl(“http://example.com“+client+”/page.php?limit=100”{
stripHtmlFromCells:false
});
const result=tgj[0];
对于(结果的rs){
//我无法检查这部分,但我希望您的示例具有正确的值。
让newDate=formatDate(striptag(rs[l][“Date”])、striptag(rs[l][“Time”]);
let user=getUser(striptag(rs[l][“user”]);
让link=getUrl(splitError[1]);
让msg=striptag(rs[l][“Error”]);
让id=getId(link);
让splitError=rs[l][“Error”]。拆分(“{
//请注意,这里我已将您的插入查询更改为准备好的语句。
connection.query(“将忽略插入条目集?”,数据,(错误,行)=>{
控制台日志(err);
连接。释放();
数据=[];
});
});
//我不明白你为什么需要在这里超时,所以我留下了评论。
//setTimeout(收集错误,10000);
};
//这是你的其他方法。。。。
//为了调用异步函数,我们将使用IIFE
(异步()=>{
等待错误();

})();
我已将您的代码更改为使用ES6和正确的模块功能。
有用的链接:,正确

const tabletojson=require('tabletojson'),
mysql=require(“mysql”),
striptag=需要(“striptag”),
fs=要求(“fs”),
路径=要求(“路径”);
常数星采集器,
迭代次数=0,
插入=0,
重复=0;
设datas=[];
const clients=[“ClientA”、“ClientB”、“ClientC”、“ClientD”、“ClientE”、“ClientF”、“ClientG”、“ClientH”];
const appDir=path.dirname(require.main.filename);
常量错误列表=[“err1”、“err2”、“err3”、“err4”、“err5”、“err6”];
const con=mysql.createPool({
主机:“本地主机”,
用户:“用户”,
密码:“密码”,
数据库:“错误”
});
//我们将使用ES6中的异步/等待
const collectErrors=async()=>{
//到目前为止,我只将语法更改为ES6
让startCollector=新日期();
//我们将尝试遍历每个客户机。我们在这里使用..的语法来允许我们使用wait
for(让客户选择客户){
//