将分块数据附加到变量会产生意外结果

问题描述 投票:0回答:1

我正在尝试将来自minio文件的JSON对象添加到MongoDB中

但是数据就像undefined[{"field":"value"}]

这是我的代码:

var miniData
minioClient.getObject(fileData.type,fileData.userId+fileData.fileName,function(err,exData) {
    exData.on('data', async function (chunck) {               
        miniData += chunck;
    });
    exData.on('end',async function () {
        console.log(miniData)
        excelDb.create({ excelArray:miniData}) 
    });
});

并且在MongoDB文档中,它存储为:

{
    "_id" : ObjectId("5e0b02b9775cee50051b2547"),
    "excelArray" : "undefined[{\"FIELD\":\"VALUE\"}
}

我想在文档中使用JSON数组。

node.js json undefined stringify minio
1个回答
1
投票

miniData一个初始值。如果您不这样做,则它隐式为undefined,并且undefined加字符串会使undefined转换为单词。请参阅下面的示例。

无需初始化变量:

var miniData;

miniData += 'a string';

console.log(miniData);

具有初始值:

var miniData = '';

miniData += 'a string';

console.log(miniData);

因此,在您的代码中,它应该像这样:

var miniData = ''; // initialize the variable with an empty string
minioClient.getObject(fileData.type,fileData.userId+fileData.fileName,function(err,exData) {
    exData.on('data', async function (chunck) {               
            miniData += chunck;
    });
    exData.on('end',async function () {
        console.log(miniData)
        excelDb.create({ excelArray:miniData}) 
    });
});

如果您想在MongoDB文档中有一个实际的数组,则在插入之前需要JSON.parse miniData,所以final解决方案应如下所示:

var miniData = ''; // initialize the variable with an empty string
minioClient.getObject(fileData.type,fileData.userId+fileData.fileName,function(err,exData) {
    exData.on('data', async function (chunck) {               
            miniData += chunck;
    });
    exData.on('end',async function () {
        console.log(miniData)
        excelDb.create({ excelArray: JSON.parse(miniData)}) 
    });
});
© www.soinside.com 2019 - 2024. All rights reserved.