gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 23:56:30 25 4
gpt4 key购买 nike

我在网页上有一个功能,可以将 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","direction":"Calle 7 #33 Buenos Aires"},

{"nombre":"何塞·路易斯·托里比奥","cedula":"4023495023","direction":"布宜诺斯艾利斯大街 11 # 69"},

{"nombre":"Joel de Jesus Toribio","cedula":"4023548902","direction":"布宜诺斯艾利斯 1 # 3 号街"},

{"nombre":"Corazon Roa","cedula":"4026984452","direccion":"Calle 3 # 19 布宜诺斯艾利斯"}

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

Outpu

最佳答案

问题已经解决了,我必须使用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();
}

关于node.js - 为什么不使用 mongoose 将完整的 JSON 发送到 mongodb?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56877550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com