skip to Main Content

My goal is to build an app that will connect different professionals from different background. I’m also using mongoose as my database.
I created a profile.js that will create and update profiles. But when I test with postman, I get the following error:
“PROFILE VALIDATION FAILED: HANDLE: PATH HANDLE IS REQUIRED.”

What can I possibly do to solve this issue?
Your help will be grateful.

const express = require('express');     // require express modules
const router  = express.Router();              // to use express router
const auth = require('../../middleware/auth');
const { check, validationResult } = require('express-validator');

const Profile = require('../../models/Profile');
const User = require('../../models/User');



//@route     GET api/profile/me
//@desc      Get current users profile
//@access    Private
router.get('/me', auth, async (req,res) => {
    try{
        const profile = await Profile.findOne({user: req.user.id}).populate(
            'user',
            ['name', 'avatar']);

        if(!profile){
            return res.status(400).json({ msg:'No profile exists for this user'});
        }

        res.json(profile);
    } catch(err){
        console.error(err.message);
        res.status(500).send('Server error');
    }
});   //to create a route

//@route     POST api/profile
//@desc      Create or update users profile
//@access    Private
router.post('/', 
[
    auth, 
    [
        check('status', 'Status is required')
            .not()
            .isEmpty(),
        check('skills', 'Skills is required')
            .not()
            .isEmpty()
    ]
] ,
async (req, res) =>{
    const errors = validationResult(req);
    if(!errors.isEmpty()){
        return res.status(400).json({errors: errors.array()})
    }

    const {
        company,
        website,
        location,
        bio,
        status,
        githubusername,
        skills,
        youtube,
        facebook,
        twitter,
        instagram,
        linkedin
      } =req.body;

      //to build profile object
      const profileFields = {};
      profileFields.user = req.user.id
      if(company) profileFields.company = company;
      if(website) profileFields.website = website;
      if(location) profileFields.location = location;
      if(bio) profileFields.bio = bio;
      if(status) profileFields.status = status;
      if(githubusername) profileFields.githubusername = githubusername;
      if(skills){
          profileFields.skills = skills.split(',').map(skills => skills.trim());
      }

      //for the social object
      profileFields.social = {}
      if(youtube) profileFields.social.youtube = youtube;
      if(facebook) profileFields.social.facebook = facebook;
      if(twitter) profileFields.social.twitter = twitter;
      if(instagram) profileFields.social.instagram = instagram;
      if(linkedin) profileFields.social.linkedin = linkedin;

      try{
        let profile = await Profile.findOne({ user: req.user.id });

        if(profile){ //if there is a profile, we will update it
            
            profile = await Profile.findOneAndUpdate(
            { user: req.user.id}, 
            {$set: profileFields },
            {new: true}
        );

            return res.json(profile);           
        }

        //this will create profiles
        profile = new Profile(profileFields);

        await profile.save();
        res.json(profile);
      } catch(err){
          console.error(err.message);
          res.status(500).send('Server Error');
      }
    }
);

module.exports = router;

6

Answers


  1. same code, same issue. In the profile Schema there is a handle field that is set to required. i commented it out and it is working fine now.

    Login or Signup to reply.
  2. use

    let const profileFields = {};
          profileFields.user = req.user.id
    

    that’s

    let profileFields = {};
          profileFields.user = req.user.id
    

    or you can use

    const profileFields = {};
        profileFields.user = req.user.id;
    
    Login or Signup to reply.
  3. the same code you made i made it,you will found handle is required in profile model delete it and your code will working

    Login or Signup to reply.
  4. handle: {
            type: String,
            required: true,
            max: 40
    }
    

    Change this code in your models/Profile.js to

    handle: {
            type: String,
            required: false,
            max: 40
        },
    
    Login or Signup to reply.
  5. I had the very same Issue . However , it happened because in your “Profile” Schema you probably you made the ‘handle’ attribute required . So , you must have to give it otherwise just make a change and make the require value to false . Such as (require: false) and hopefully your issue will go .

    Login or Signup to reply.
  6. This is happening because your Profile schema has a handle field(attribute) in which you have a property required: true.

    Go to the profile schema file and remove the handle attribute(field) or remove the required: true< from the handle attribute

    Example

    Profile.js

    const mongoose = require('mongoose');
    const Schema = mongoose.Schema;
    // Create Schema
    const Profile = new Schema({
        ...,
        handle: {
            type: ...,
            required: true //remove this line
        }
        ...
    });
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search