Home > Blockchain >  mongo ref returning null in database?
mongo ref returning null in database?

Time:03-29

I am working on a react project using ther MERN stack. When the favourite object is created in the database userFrom returns null. While everything is present. In the user model I had no issue referencing role to user. I tried removing the reference to the role model from user and trying it again but I still had the same issue.

favourites model

const mongoose = require('mongoose');

const Favourite = mongoose.model(
    "Favourite",
    new mongoose.Schema({
        movieId : String,
        movieTitle: String,
        movieImg: String,
        userFrom:[
            {
                type: mongoose.Schema.Types.ObjectId,
                ref: "User"
            }
        ]
    })

)

user model

const mongoose = require("mongoose");

const User = mongoose.model(
  "User",
  new mongoose.Schema({
    username: String,
    email: String,
    password: String,
    roles: [
      {
        type: mongoose.Schema.Types.ObjectId,
        ref: "Role"
      }
    ]
  })
);

module.exports = User;

role model

const mongoose = require("mongoose");

const Role = mongoose.model(
  "Role",
  new mongoose.Schema({
    name: String
  })
);

module.exports = Role;

favourite.routes

const express =  require('express');
const router = express.Router();
const { authJwt } = require("../middlewares");
const Favourite = require("../models/favourite.model");

    router.use(function(req, res, next) {
      res.header(
        "Access-Control-Allow-Headers",
        "x-access-token, Origin, Content-Type, Accept"
      );
      next();
});


router.post("/favouriteNumber", [authJwt.verifyToken], (req, res) => {
    Favourite.find({"movieId": req.body.movieId})
        .exec((err, favourite) => {
            if(err) return res.status(400).send(err)
            res.status(200).json({success: true, favouriteNumber: favourite.length})
        })
})

router.post("/favourited", [authJwt.verifyToken], (req, res) => {
    Favourite.find({"movieId": req.body.movieId, "userFrom": req.body.userFrom})
        .exec((err, favourite) => {
            if(err) return res.status(400).send(err) 

            let result = false;
            if(favourite.length !== 0) {
                result = true
            }

            res.status(200).json({success: true, favourited: result});


        })
})

router.post("/addToFavourite", [authJwt.verifyToken], (req, res) => {
    
    const favourite = new Favourite(req.body)

    favourite.save((err, doc) => {
        if(err) return res.json({success: false, err})
        return res.status(200).json({success: true, doc})
    })
})

router.post("/removeFavorite", [authJwt.verifyToken], (req, res) => {
    
    Favourite.findOneAndDelete({movieId: req.body.movieId, userFrom: req.body.userFrom})
        .exec((err, doc) => {
            if(err) return res.json({success: false, err})
            return res.status(200).json({success: true, doc})
        })
})
module.exports = router;

CodePudding user response:

You aren't adding the user to the favourite when creating it. If you are using express-jwt then you can do that very easily with req.user:

router.post("/addToFavourite", [authJwt.verifyToken], (req, res) => {
    req.body.userFrom = req.user._id
    const favourite = new Favourite(req.body)

    favourite.save((err, doc) => {
        if(err) return res.json({success: false, err})
        return res.status(200).json({success: true, doc})
    })
})
  • Related