Попытка заполнить мою модель пользователя и получить ошибку типа - PullRequest
0 голосов
/ 17 октября 2018

В моей программе я хочу заполнить свою индексную страницу моделью, называемой группой.Ранее я только что показал все группы, которые существовали в базе данных, но теперь я хочу показать только те группы, с которыми связан пользователь, вошедший в систему.

Вот модели: Групповая модель

var mongoose = require("mongoose");

var groupSchema = new mongoose.Schema({

    name: String,
    thumbnail: String,
    description: String,
    author: {
        id: {
            type: mongoose.Schema.Types.ObjectId,
            ref: "User"
        },
        username: String
    },
    inviteCode: String,
    images: [
        {
            type: mongoose.Schema.Types.ObjectId,
            ref: "Image"

        }
    ],
    users: [
        {
           type: mongoose.Schema.Types.ObjectId,
           ref: "User"
        }
    ] });

module.exports = mongoose.model("Group", groupSchema);

Модель пользователя

var mongoose = require("mongoose");
var passportLocalMongoose = require("passport-local-mongoose");

var UserSchema = new mongoose.Schema({
    username: String,
    password: String,
    groups: 
        [
            {
                type: mongoose.Schema.Types.ObjectId, //referencing model by id
                ref: "Group" //name of the model
            }
        ],
    images: 
        [
            {
                type: mongoose.Schema.Types.ObjectId, //referencing model by id
                ref: "Image" //name of the model
            }
        ]
});

UserSchema.plugin(passportLocalMongoose); //add in local mongoose methods to user

module.exports = mongoose.model("User", UserSchema);

Мой индексный маршрут:

//Index Route
router.get("/", middleware.isLoggedIn, function(req, res){
    var user = req.user;
    user.populate("groups").exec(function(err, allGroups){ 
       if(err){
           console.log(err);
       } else {
           res.render("groups/show", {groups: allGroups});
           console.log(allGroups);
       }
   });
});

И этоя получаю ошибку:

Ошибка типа: user.populate (...). exec не является функцией

Я не уверен, почему я не могу использовать метод populate сМоя пользовательская модель, может кто-нибудь объяснить мне альтернативу для достижения желаемого результата.Спасибо.

1 Ответ

0 голосов
/ 17 октября 2018

Я думаю, что проблема в том, что req.user не является схемой, поэтому .populate не является методом, переносимым этой переменной в прототипе объекта.Следовательно, терминал сообщает вам, что это не функция.

Вы должны запросить пользовательскую схему, подобную этой, в вашем индексе маршрута:

const User = require("./models/user");

Затем найдите пользователя по его идентификатору и заполните его:

//Index Route
    router.get("/", middleware.isLoggedIn, function(req, res){
        var user = req.user;
        User.findById(req.user._id, function(err, foundUser) {
            let user = foundUser;
            user.populate("groups").exec(function(err, allGroups){ 
               if(err){
                   console.log(err);
               } else {
                   res.render("groups/show", {groups: allGroups});
                   console.log(allGroups);
               }
           });
        });
    });

Дайте мне знать, если это работает!

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