Как я могу передать схему модели в маршрут - PullRequest
0 голосов
/ 11 апреля 2019

Я определил модель схемы внутри функции файла контроллера, который создает новую коллекцию в MongoDB. Я хочу, чтобы модель передавалась в файле маршрута. Я попытался выполнить const Thing = mongoose.model('admin.companyName'); в соответствии с моей схемой, я получаю сообщение об ошибке: - throw new mongoose.Error.MissingSchemaError(name); MissingSchemaError: Schema hasn't been registered for model "admin.companyName". Use mongoose.model(name, schema) в файле lib / index mongoose.

Моя функция внутри контроллера : -

admin.save((err, doc) =>{
        if(!err){

            res.send(doc);

        //make copy to Company collection
            let arr = Object.keys(doc.schema.obj); //doc.schema.paths if I need same ID
            let Obj = {};
            arr.map(key => Obj[key] = doc[key]);
            var thingSchema = new mongoose.Schema({}, { strict: false, collection: admin.companyName });
            var Thing = mongoose.model(admin.companyName , thingSchema);
            var thing = new Thing(Obj); 
            thing.save();
            console.log(thing);

Как передать var Thing = mongoose.model(admin.companyName , thingSchema); в мой файл маршрута, чтобы я мог использовать его в одном из route : -

ПРИМЕЧАНИЕ: - Имя схемы admin.companyName не является фиксированным и продолжает изменяться

const Thing = mongoose.model('admin.companyName'); Thing.updateOne( { emailResetTokenn: emailTokenn },{ $set: { verified: true }},(err) =>{ ......

РЕДАКТИРОВАТЬ: - файл маршрутизации

const express = require ('express');
const router = express.Router();
const mongoose = require ('mongoose');
const Admin = mongoose.model('Admin');
const Thing = mongoose.model('Thing');
const ctrlAdmin = require ('../controllers/admin.controller.js');
const jwt = require('jsonwebtoken');


router.get('/verify',function(req,res){

    console.log('request recieved');
    const emailTokenn = req.query.id;
    console.log(emailTokenn);

   Thing.updateOne( { emailResetTokenn: emailTokenn },{ $set: { verified: true }},(err) =>{

    if(!err){
        return res.redirect('https://localhost/something.com/fw18/index.html'); 
    }
    else{
        throw err;
    }
  });
});

1 Ответ

0 голосов
/ 11 апреля 2019

Если вы ищете модель Thing, вы можете использовать mongoose.modelNames () , которая возвращает массив всех созданных имен моделей.

const Genre = mongoose.model('Genre', genreSchema);
const Book = mongoose.model('Book', bookSchema);

console.log(mongoose.modelNames()) // gives ['Genre', 'Book']

Это будеттолько дать вам названия моделей, вам нужно будет выяснить, как найти нужную модель, возможно, используя атрибуты admin.

Редактировать Если у вас есть атрибут Admin вВы можете запросить объект, вместо этого вы можете получить модель Thing, необходимую для установки обработчика маршрута:

router.get('/:adminId/verify',function(req,res){
    console.log('request recieved');
    const emailTokenn = req.query.id;
    console.log(emailTokenn);
    Admin.FindOne({_id: req.params.adminId})
       .exec()
       .then(admin => {
          const Thing = mongoose.model(admin.companyName);
          Thing.updateOne( { emailResetTokenn: emailTokenn },{ $set: { verified: true }},(err) =>{})
       })

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