Я должен пересылать файл CSV с 13000 реестрами в базу данных mongodb в nodejs. Я старался выполнять просьбу post из-за каждого реестра, чтобы мочь показывать общее продвижение, но блокируется frontend.
handleUploadRecords = async () => {
const endpoint = `${this.props.apiUrl}/api/dbcsv/addUA`
const {dataLoaded, dataStatus} = this.state
dataLoaded.forEach(async u => {
let res = await axios.post(endpoint, {
user: u
})
console.log(res)
})
}
Я могу делать это пересылая весь файл в сервер и выполняя процесс внутри, но не, как показывание процентного содержания продвижения в frontend с react. Каков лучший способ это делать?
Я solucionГ© само делая POST перекурсивной формы 100 в 100 реестрах. В router, который получает реестры, ты можешь использовать решение Инсертмани де Монгодб, чтобы вводить все их разом.
Заблаговременно чтобы посылать просьбы в API, меня rellenГ© array, где каждый posiciГіn он соответствует полному реестру CSV, что estГ©s манипулируя, в примере serГ - в "miArray".
cГіdigo backend serГ - во что-то как это:
var arrayAux = [];
if (miArray.length > 0) {
for(var i = 0; i < miArray.length; i++) {
arrayAux.push(miArray[i]);
if (arrayAux.length == 100 || i == miArray.length - 1) {
//Es aquí donde hago el método POST, enviándo al endpoint de tu API el array con los 100 registros
}
}
}
Из-за Гєltimo, router, который захватывает призывы к endpoint твоего API deberГ,, - чтобы быть чем-то похожим на это:
var db = mongoose.connection; //Con esto manipulas la conexión a mongoDB directamente, pudiendo usar funciones nativas de mongoDB
router.route('/endpointDeTuAPI').post(, function (req, res) {
var arrayAux = []; //Aquí iremos añadiendo los registros que vienen en el cuerpo de cada petición POST
var aux ;
for(var i = 0; i < req.body.length; i++){
arrayAux.push(req.body[i]);
}
db.collection("nombreDeTuColección").insertMany(arrayAux, function(err){
if(err) return res.status(500).send(`Error al insertar campos en la BD: ${err}`);
return res.status(200).send("Documentos insertados correctamente en la DB.");
});
С этим, которые я прокомментировал тебе, разделяется nВє просьб между 100. В меня я funcionГі, я надеюсь, что он подает вас, хотя не точно, по крайней мере идея, которую я захотел передать. В случае, если ты захочешь сделать доказательства, ты можешь пытаться посылать mГЎs реестры в одной самой peticiГіn, все те mГЎs envГ - он разом, меньше просьб necesitarГЎs.
Выбор 1:
Определяет:
N : = я нумерую полных реестров
М : = я нумерую разрешенных request
P : = я нумерую реестров из-за request
и enviГЎ реестры из-за пакетов P = N/M.
OpciГіn 2.
EnviГЎ файл в сервер, с сервера сохраняет в базу данных и использует socket, чтобы сообщать прогресс клиенту.