我在网页上具有一项功能,该功能将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”}
我什至输出每个文档以验证文档是否存储在变量中,这是输出:
答案 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();
}