为什么不使用mongoose将完整的JSON发送到mongodb?

时间:2019-07-03 20:31:11

标签: node.js json angular mongodb mongoose

我在网页上具有一项功能,该功能将excel文件上传到Node并将其解析为JSON,然后将数据传递给mongodb。它仅将一个文档发送到mongodb,每个文档都组织在一个数组内,并使用for循环遍历每个文档,因此,唯一要发送的文档是第一个文档。我也尝试使用model.create(docs)函数将每个文档发送到数据库,但这是相同的问题。这是代码(model.create(docs)在///////////////内部):

app.post('/upload', function(req, res){
var exceltojson;
upload(req, res, function(err){
    if (err) {
        res.json({error_code:1,err_desc:err})
        return;
    }
    if(!req.file){
        res.json({error_code:1, err_desc:"No file passed"});
        return;
    }

    if(req.file.originalname.split('.')[req.file.originalname.split('.').length-1] === 'xlsx'){
        exceltojson = xlsxtojson;
    } else {
        exceltojson = xlstojson;
    }
    try {
        exceltojson({
            input: req.file.path,
            output: "./outPutJSON/output.json",
            lowerCaseHeaders: true
        }, function(err, result){
            if(err){
                return res.json({error_code:1, err_desc:err, data: null});
            }
            res.json({datos:"Los datos fueron agregados exitosamente"});
            //res.json({error_code:0, err_desc:null, data: result});

            let resultDos = fs.readFile("./outPutJSON/output.json", 'utf8', (err, fileContents) => {
                if (err) {
                  console.error(err)
                  return;
                }
                try {
                  const data = JSON.parse(fileContents)
                  console.log(data.length);

                  //////////////////////////////////////////////////

                  model.create(data, function (err) {
                      if(err){
                          console.log(err);
                      }
                  });

                  ///////////////////////////////////////////////////
                  //for(var cantidad = 0; cantidad < data.length;cantidad++{
                    //let documento = data[cantidad];
                    //let mod = new model(documento);
                    //console.log(documento);
                   // mod.save(function(err){
                    //    if(err){
                        //    console.log(err);
                     //   }
                   // });
                  //}
                  //////////////////////////////////////////////////////
                } catch(err) {
                  console.error(err);
                }
              })
              console.log(resultDos);
            });
            var fs = require('fs');
            try {
                fs.unlinkSync(req.file.path)
            }catch(e){

            }
    } catch (e) {
        res.json({error_code:1, err_desc:"Corrupted excel file"});
    }
  });
});

这是JSON文件:

仅发送此邮件-> {“ nombre”:“ Wilson Junior Toribio”,“ cedula”:“ 4022589632”,“ direccion”:“ Calle 7#33 Buenos Aires”},

{“ nombre”:“ Jose Luis Toribio”,“ cedula”:“ 4023495023”,“ direccion”:“ Calle 11#69 Buenos Aires”},

{“ nombre”:“ Joel de Jesus Toribio”,“ cedula”:“ 4023548902”,“ direccion”:“ Calle 1#3 Buenos Aires”},

{“ nombre”:“ Corazon Roa”,“ cedula”:“ 4026984452”,“ direccion”:“ Calle 3#19 Buenos Aires”}

我什至输出每个文档以验证文档是否存储在变量中,这是输出:

Outpu

1 个答案:

答案 0 :(得分:1)

问题已经解决,我不得不使用async和await将回调编辑为同步,并且还使用let声明for中的变量cantidad:

let resultDos = fs.readFile("./outPutJSON/output.json", 'utf8', -> async (err, fileContents) => {
                if (err) {
                  console.error(err)
                  return;
                }
                try {
                  let data = JSON.parse(fileContents)
                  console.log(data.length);

                  console.log(data);
                //   model.create(data, function (err) {
                //       if(err){
                //           console.log(err);
                //       }
                //   });

                  for(let cantidad = 0; cantidad < data.length; cantidad++){
                    var documento = data[cantidad];
                    var mod = new model(documento);
                    console.log(documento);
                 -> await mod.save(documento);
                    // model.create(documento).save();
                  }