'type error: user.save() is not a function and Argument passed in must be a string of 12 bytes or a string of 24 hex characters

Im trying to build a managing system where people can input their email, number and name but im having trouble finding out where these errors are coming from. If anyone can detect something please comment or correct. Here is everything.

Here are my controllers for my routes.

const User = require('../Modelschema/users')
const { validationResult } = require('express-validator')


const getUsers = async (req, res) => {

    const { id } = req.params

    try {
        const users = User.findById(id).toString()
        if(!users) return res.status(400).send({error: 'User not found'})
        res.json(users)
    
    } catch (error) {
        console.error(error)
    }
}


const getUser = async (req, res) => {

    const { id } = req.params

    try {
      
        const user = await User.findById(id).populate('name', 'contact', 'email')
        if(!user) return res.status(400).send({error: 'User not found'})
        res.json(user)

    } catch (error) {
        console.error(error)
    }
}

const createUser = async (req, res) => {

    const {name, email, contact} = req.body

    try {
    const errors = validationResult(req)
    if(!errors.isEmpty()) return res.status(400).json({ errors: errors.array()})
    
    let user = await User.findOne({ email })

    if(user) return res.status(400).send({ errors: 'user already exist'})

    user = new User ({email, name, contact})

    await user.save()
        
    } catch (error) {
        console.error(error)
    }
}

const deleteUser = async (req, res) => {

    const { id } = req.params

    try {
       const user = await User.findByIdAndDelete(id)
       if(!user) res.status(400).send({ error: 'User not found'})
       res.status(200).send('User Successfully Deleted!')

    } catch (error) {
        console.error(error)
    }
}


const updateUser = (req, res) => {

    const { id } = req.params

    try {

        const user = User.findByIdAndUpdate(id)
        Object.assign(user, req.body);
        user.save()
        res.send({ data: user})
        res.send("User updated successfully!")
        
    } catch (error) {
        console.error(error)
    }
}

module.exports = { getUser, getUsers, updateUser, deleteUser, createUser}

Heres my schema where i have all the info that i want to display

const mongoose = require('mongoose');
const uniqueValidator = require('mongoose-unique-validator');

let mgmtSchema = new mongoose.Schema({
    name: { type: String, required: true},
    email: { type: String, required: true},
    contact: { type: Number, required: true},
    date: { type: Date, default: Date.now}
})

mgmtSchema.plugin(uniqueValidator);

module.exports = mongoose.model('mgmt', mgmtSchema);

here are my routes.

const express = require('express');
const { getUsers, createUser, getUser, updateUser, deleteUser } = require('../controllers/users.js')
const router = express.Router();
const { check } = require('express-validator')

router.get("/users", getUsers)
router.get("/user/:id", getUser)
router.put("/user/:id", updateUser)
router.delete("/user/:id", deleteUser)

router.post("/user", createUser, [
    check('name', 'Name is required!'),
    check('email', 'Email is required!'),
    check('contact', 'Contact is required!')
])

module.exports = router;

And lastly heres my server

const express = require('express')
const cors = require('cors')
const app = express()
const dotenv = require('dotenv')
const mongoose = require('mongoose')

app.use(cors())
app.use(express.urlencoded({ extended: true }))
dotenv.config()
app.use(express.json())
mongoose.connect(process.env.DATABASE_ACCESS, () => console.log('Database Connected'))

const userRoutes = require('./routes/users.js')

app.use('/api', userRoutes)

app.all('*', (_req, res) => res.send('That route does not exist!'))

app.listen(5500, () => console.log('Server is listening on port 5500'))


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source