我的 Express + NodeJS 应用程序出现错误。我正在使用来自 CoinAPI.io 的 API,过去我曾遇到过从 API 获取字节数组作为响应的问题。我已经调查了这个问题,并在过去用 a 解决了它Buffer.concat
,所以我可以向前端发送一个 json 对象作为响应。下面的代码:
app.get('/build', function(req, res){
console.log('Building the database...');
// make client connect to mongo service
MongoClient.connect(url, function(err, db) {
if (err) throw err;
console.log("SUCCESS: Database created");
let dbo = db.db('lab5');
// Craft request header
const options = {
"method": "GET",
"hostname": "rest.coinapi.io",
"path": "/v1/assets",
"headers": {'X-CoinAPI-Key': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'}
};
// Send request to CoinAPI.io
const request = https.request(options, response => {
let chunks = [];
response.on("data", chunk => {
chunks.push(chunk);
});
response.on('end', () => {
let json = Buffer.concat(chunks);
// Insert into the database
dbo.collection('crypto').insertMany(json, function(insertErr, insertRes) {
if (insertErr) throw insertErr;
console.log("Number of documents inserted: " + insertRes.insertedCount);
db.close();
});
console.log('End of request stream')
});
});
request.end();
// print database name
console.log("NOTE: db object points to the database : "+ db.databaseName);
db.close();
});
res.end();
})
这以前有效,但现在我必须将检索到的数据插入到 MongoDB 数据库中。所以,我尝试对insertMany
我body
从Buffer.concat
. 但现在我收到以下错误。
MongoError: docs parameter must be an array of documents
我在集合插入之前做了一个,并且正文将我刚刚console.log(json)
进行 concat的字节数组转储到控制台中,我不知道为什么。
编辑:作为对 Sohail 关于 using的回应.toJSON()
,这就是我尝试将缓冲区转换为 json 时发生的情况
let buf = Buffer.concat(chunks);
let json = buf.toJSON();
console.log(json);
当我控制台日志 json...
{
type: 'Buffer',
data: [
91, 10, 32, 32, 123, 10, 32, 32, 32, 32, 34, 97,
115, 115, 101, 116, 95, 105, 100, 34, 58, 32, 34, 78,
80, 88, 83, 34, 44, 10, 32, 32, 32, 32, 34, 110,
97, 109, 101, 34, 58, 32, 34, 80, 117, 110, 100, 105,
32, 88, 34, 44, 10, 32, 32, 32, 32, 34, 116, 121,
112, 101, 95, 105, 115, 95, 99, 114, 121, 112, 116, 111,
34, 58, 32, 49, 44, 10, 32, 32, 32, 32, 34, 100,
97, 116, 97, 95, 115, 116, 97, 114, 116, 34, 58, 32,
34, 50, 48, 49,
... 5165802 more items
]
}
我仍然收到插入字节数组/缓冲区的错误