Две коллекции Mongoose на одной странице в Экспресс - PullRequest
0 голосов
/ 07 июня 2019

У меня есть маршрут с Express, который отображает результаты из двух разных коллекций MongoDB.Когда вызывается URL, он отображает правильные результаты.Есть две коллекции.Первый работает хорошо, но не второй (у меня есть схема для двух из них)

router.get('/demo/:cars_getroute', (req, res, next) => {
Democar.findOne({cars_getroute: req.params.cars_getroute})
    .then((democars) => {
        res.render('demo/fichecar-demo', { marque: democars.marque,
            modele: democars.modele,
            sous_modele: democars.sous_modele,
            sous_modele2: democars.sous_modele2,
            type: democars.type
        });
        Democarauction.findOne({ cars_getroute: req.params.cars_getroute })
            .then((democarauctions) => {
                res.render('demo/fichecar-demo', { marqueauction: democarauctions.gm_url });
            });
    });

})

Как мне иметь вторую коллекцию на моей странице?

РЕДАКТИРОВАТЬ: Мои модели:

    const mongoose = require('mongoose');
const Schema = mongoose.Schema;

//Create Schema
const CarSchema = new Schema({
    objectId: {
        type: Number
    },
    sous_modele2: {
        type: String
    },
    marque: {
        type: String
    },
    modele: {
        type: String
    },
    sous_modele: {
        type: String
    },
    type: {
        type: String
    },
    precision: {
        type: String
    },
    years_interval: {
        type: String
    },
    cars_getroute: {
        type: String
    },
    img_url: {
        type: String
    },
    cote: {
        cote_1989: {
            cote_1989_f: String,
            cote_1989_eu: {
                cote_1989_excp: Number,
                cote_1989_concours: Number,
                cote_1989_base: Number,
                cote_1989_be: Number,
                cote_1989_me: Number,
                cote_1989_ar: Number,
                cote_1989_epa: Number
            }
        },
        cote_2004: {
            cote_2004_excp: Number,
            cote_2004_concours: Number,
            cote_2004_base: Number,
            cote_2004_be: Number,
            cote_2004_me: Number,
            cote_2004_ar: Number,
            cote_2004_epa: Number
        },
        cote_2014: {
            cote_2014_excp: Number,
            cote_2014_concours: Number,
            cote_2014_base: Number,
            cote_2014_be: Number,
            cote_2014_me: Number,
            cote_2014_ar: Number,
            cote_2014_epa: Number
        },
        cote_2017: {
            cote_2017_excp: Number,
            cote_2017_concours: Number,
            cote_2017_base: Number,
            cote_2017_be: Number,
            cote_2017_me: Number,
            cote_2017_ar: Number,
            cote_2017_epa: Number
        },
        cote_2019: {
            cote_2019_excp: Number,
            cote_2019_concours: Number,
            cote_2019_base: Number,
            cote_2019_be: Number,
            cote_2019_me: Number,
            cote_2019_ar: Number,
            cote_2019_epa: Number
        },
    },
    cote_actual: Number,
    performance: {
        perfo1989: String,
        perfo2004: String,
        perfo2014: String,
        perfo2017: String
    }   
},
{
    collection: 'carfiche2019'
});

mongoose.model('cars', CarSchema);

DemoCarauction:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

//Create Schema
const DemocarauctionSchema = new Schema({
    objectID: {
        type: Number
    },
    cars_getroute: {
        type: String
    },
    gm_url: {
        type: String
    },
    "results": {
        marque: {
            type: String
        },
        model: {
            type: String
        },
        model_year: {
            type: String
        },
        price_str: {
            type: String
        },
        prince_int: {
            type: Number
        },
        price_currency: {
            type: String
        },
        sold: {
            type: Boolean
        },
        auction_house: {
            type: String
        },
        auction_country: {
            type: String
        },
        auction_date: {
            type: String
        },
        auction_datetime: {
            type: String
        },
        auction_url: {
            type: String
        },
        image_urls: {
            type: String
        },
        price_int_eu: {
            type: Number
        },
    }

},
    {
        collection: 'democarficheauction'
    });

mongoose.model('democarauctions', DemocarauctionSchema);

1 Ответ

1 голос
/ 07 июня 2019

Вы не можете отрендерить дважды. Я рекомендую вам использовать Promise.all

router.get('/demo/:cars_getroute', (req, res, next) => {
    Promise.all([Democar.findOne({cars_getroute: req.params.cars_getroute}), Democarauction.findOne({ cars_getroute: req.params.cars_getroute })])
    .then(result => {
        const [democars, democarauctions] = result;
        res.render('demo/fichecar-demo', { marque: democars.marque,
            modele: democars.modele,
            sous_modele: democars.sous_modele,
            sous_modele2: democars.sous_modele2,
            type: democars.type,
            marqueauction: democarauctions.gm_url
        });
    })
    .catch(err => {
        // handle error. 
        console.log(err);
    })

});

Важно добавить catch block` для обработки любой ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...