API call fails when i put required:true model schema

Viewed 25

I am trying to make an api endpoint and this is my model schema MongoDB

const mongoose = require("mongoose");

const UserSchema = new mongoose.Schema(
  {
    username: {
      type: String,
      required: true,
      unique: true,
    },
    email: {
      type: String,
    },
    password: {
      type: String,
    },
    profilePic: {
      type: String,
      default: "",
    },
  },
  { timestamps: true }
);

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

API logic

const router = require("express").Router();
const User = require("../models/User");

//REGISTER
router.post("/register", async (req, res) => {
  try {
    const newUser = new User({
      username: req.body.username,
      email: req.body.email,
      password: req.body.password,
    });

    const user = await newUser.save();
    res.status(200).json(user);
  } catch (err) {
    res.status(500).json(err);
  }
});
module.exports = router;

index.js

const express = require("express");
const app = express();
const dotenv = require("dotenv");
const mongoose = require("mongoose");
const authRoute = require("./routes/auth");
const cors = require("cors");
const bodyParser = require("body-parser");
app.use(
  bodyParser.urlencoded({
    extended: false,
  })
);
app.use(bodyParser.json());
app.use(express.urlencoded({ extended: true }));
app.use(cors());
app.use(express.json());

dotenv.config();

mongoose
  .connect(process.env.MONGO_URL, {
    useUnifiedTopology: true,
    useNewUrlParser: true,
  })
  .then(() => console.log("DB Connected!!!"))
  .catch((err) => {
    console.log("did not work", err);
  });

app.use("/api/auth", authRoute);

app.use("/", (req, res) => {
  console.log("main url");
});

app.listen("5002", () => {
  console.log("server running");
});

When I am trying to POST call to localhost:5002/api/auth/register , with the following body

{
    "username": "testname",
    "email": "test@gmail.com",
    "password": "122",
}

I get the following error

{
    "errors": {
        "username": {
            "name": "ValidatorError",
            "message": "Path `username` is required.",
            "properties": {
                "message": "Path `username` is required.",
                "type": "required",
                "path": "username"
            },
            "kind": "required",
            "path": "username"
        }
    },
    "_message": "User validation failed",
    "name": "ValidationError",
    "message": "User validation failed: username: Path `username` is required."
}

When I remove required:true this api call works but i cant see the fields for username, email, password in collection of the database.

What am I doing wrong here?

0 Answers
Related