Пересылать CSV на основе данных Mongo DB с nodejs и react

Я должен пересылать файл 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. Каков лучший способ это делать?

2
задан 07.10.2019, 04:24
2 ответа

Я 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.

0
ответ дан 01.12.2019, 15:55

Выбор 1:

Определяет:

N : = я нумерую полных реестров

М : = я нумерую разрешенных request

P : = я нумерую реестров из-за request

и enviГЎ реестры из-за пакетов P = N/M.

OpciГіn 2.

EnviГЎ файл в сервер, с сервера сохраняет в базу данных и использует socket, чтобы сообщать прогресс клиенту.

-2
ответ дан 01.12.2019, 15:55

Теги

Похожие вопросы