'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 |
|---|
