Обновление 2 После множества комментариев я решил загрузить свою полную статистическую функцию + доступ к моей БД в атласе (БД используется только для целей тестирования, так что все в порядке)
Я создал агрегатный конвейер, который возвращает много документов из моей базы данных. Я также могу увидеть результаты, используя "console.log". Но я не могу вернуть результаты в ответ, когда использую Postman. Вы можете проверить его на PostMan с использованием AreaName = Венгрия, разрешение = PT15M, год = 2018, месяц = 1, день = 1
var express = require('express');
var router = express.Router();
var assert = require('assert')
const URL = 'mongodb+srv://user:user@cluster0-0pwss.mongodb.net/test?retryWrites=true&w=majority'
const MongoClient = require('mongodb').MongoClient
//const CircularJSON = require('circular-json');
//const {parse, stringify} = require('flatted/cjs');
router.get('/:AreaName/:Resolution/:Year/:Month/:Day', (req, res, next) => {
const _AreaName=req.params.AreaName
const _Resolution=req.params.Resolution
const _Year = parseInt(req.params.Year)
const _Month = parseInt(req.params.Month)
const _Day = parseInt(req.params.Day)
MongoClient.connect(URL,{
useNewUrlParser: true,
useUnifiedTopology: true},
async (err, client) => {
if (err) throw err;
else console.log('connected to db');
assert.equal(null, err)
const db = client.db('energy')
var collection = db.collection('ActualTotalLoad')
const agg = [
{
$match :
{
AreaName: _AreaName,
Day : _Day,
Month: _Month,
Year: _Year
}
},
{
$lookup:
{
from: 'ResolutionCode',
localField: 'ResolutionCodeId',
foreignField : 'Id',
as: "resolution_codes"
}
},
{
$unwind: {path : "$resolution_codes"}
},
{
$match : {'resolution_codes.ResolutionCodeText' : _Resolution}
},
{
$addFields : {ResolutionCode : '$resolution_codes.ResolutionCodeText',
Source :'entso-e',
Dataset :'ActualTotalLoad'
}
},
{
$project :
{
_id:0,
Id : 1,
ResolutionCodeId:1,
Source : 1,
AreaName: 1,
Year : 1,
Month : 1,
Day : 1,
ResolutionCode : 1
}
}
];
var cursor = collection.aggregate(agg)
cursor.forEach(doc => {
console.log(doc)
})
await cursor.toArray((error, result) => {
if(error) {
return res.status(500).send(error);
}
cursor.forEach(doc => {
res.send(doc)
})
});
})// connection ends here
})
module.exports = router;
-> приведенный выше код возвращает значения json, а затем сервер прерывает
Я вижу остаток " cursor.forEach (do c => {console.log (do c)}) " в терминале, и это, кажется, работает нормально. Что я Я спрашиваю, как вернуть ответ в json. Что-то вроде " res. json (курсор) " Я пытался сделать несколько различных функций / методов, но ни одна из них не работает.
Обновление После ответа я попробовал это
cursor.toArray((error, result) => {
if(error) {
return res.status(500).send(error);
}
cursor.forEach(doc => {
res.send(doc)
})
});
Приведенный выше код при тестировании d с почтальоном возвращает 1 json документ из базы данных. Проблема в том, что он возвращает только один, а затем происходит сбой сервера. Документов, которые я хочу вернуть, несколько. Сообщение об ошибке: Ошибка [ERR_HTTP_HEADERS_SENT]: невозможно установить заголовки после их отправки клиенту