When i make a post request from my postman, it sends the request, returns a 201 success code, but nothing is saved on my database, it returns an empty value. Here is my App.js Code,
const express = require("express");
const app = express();
const mongoose = require("mongoose");
const dotenv = require("dotenv");
const authRoute = require("./routes/auth");
const bodyParser = require("body-parser");
const cookieParser = require("cookie-parser");
const passport = require("passport");
const flash = require("express-flash");
const session = require("express-session");
const cors = require("cors");
require("./config/passport");
require("./config/google-config");
require("./config/facebook-config");
dotenv.config();
mongoose.set("strictQuery", false);
mongoose
.connect(process.env.MONGO_URL)
.then(() => console.log("connected to db"))
.catch((e) => console.log(e));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(
session({
secret: "***",
resave: false,
saveUninitialized: true,
})
);
app.use(cors());
app.use(passport.initialize());
app.use(passport.session());
app.use(flash());
app.use("/api/user", authRoute);
app.listen(3000, () => console.log("Server up and running"));
My Auth Code
const express = require("express");
const router = express.Router();
const User = require("../model/users");
const jwt = require("jsonwebtoken");
const bcrypt = require("bcrypt");
const { registerValidation, loginValidation } = require("../validation");
const passport = require("passport");
require("../config/passport");
require("../config/google-config");
require("../config/facebook-config");
//register-user
router.post("/register", async (req, res) => {
const { error } = registerValidation(req.body);
if (error) return res.status(400).send(error.details[0].message);
//check if user is registered
const emailExist = await User.findOne({ email: req.body.email });
if (emailExist) return res.status(400).send("Email already exist");
//hashpassword
const salt = await bcrypt.genSalt(10);
const hashedPassword = await bcrypt.hash(req.body.password, salt);
//createUser
const user = new User({
name: req.body.name,
email: req.body.email,
password: hashedPassword,
phoneNumber: req.body.phoneNumber,
});
try {
const savedUser = await user.save();
res.send({ user: user._id });
} catch (err) {
res.status(400).send(err);
}
});
//login
router.post("/login", async (req, res) => {
const { error } = loginValidation(req.body);
if (error) return res.status(400).send(error.details[0].message);
const userExist = await User.findOne({ email: req.body.email });
if (!userExist) return res.status(400).send("Email or Password Invalid");
const validPassword = await bcrypt.compare(
req.body.password,
userExist.password
);
if (!validPassword) return res.status(400).send("Invalid Password");
//create and assign a token
const token = jwt.sign({ _id: User._id }, process.env.TOKEN_SECRET);
res.header("auth-token", token).send(token);
res.send("Signed In Successfully");
});
router.get(
"/auth/google",
passport.authenticate("google", {
scope: ["profile", "email"],
})
);
router.get(
"/auth/google/callback",
passport.authenticate("google", {
failureRedirect: "/failed",
}),
function (req, res) {
res.redirect("/success");
}
);
router.get("/auth/facebook", passport.authenticate("facebook"));
router.get(
"/auth/facebook/callback",
passport.authenticate("facebook", { failureRedirect: "/login" }),
(req, res) => {
res.redirect("/");
}
);
const isLoggedIn = (req, res, next) => {
req.user ? next() : res.sendStatus(401);
};
router.get("/failed", (req, res) => {
res.send("Failed");
});
router.get("/success", isLoggedIn, (req, res) => {
res.send(`Welcome ${req.user.email}`);
});
router.post("/:_id/books/current-reading", async (req, res) => {
const {
bookTitle,
bookAuthor,
totalPages,
pagesLeft,
daysLeft,
bookGenre,
bookCompleted,
} = req.body;
const user = await User.findById(req.params._id);
if (!user) return res.status(404).send("User not found");
user.bookReading.currentReading = {
...user.bookReading.currentReading,
bookTitle: bookTitle,
bookAuthor: bookAuthor,
totalPages: totalPages,
pagesLeft: pagesLeft,
daysLeft: daysLeft,
bookGenre: bookGenre,
bookCompleted: bookCompleted,
};
const savedUser = await user.save();
res.status(200).json(savedUser);
});
module.exports = router;
And my schema
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const bookReadingSchema = new Schema({
pagesLeft: {
type: Number,
default: 0,
},
bookCompleted: {
type: Boolean,
default: false,
},
daysLeft: {
type: Number,
default: 0,
},
bookTitle: {
type: String,
default: "",
},
totalPages: {
type: Number,
default: 0,
},
bookAuthor: {
type: String,
default: "",
},
bookGenre: {
type: String,
default: "",
},
});
const bookReadingDefault = {
pagesLeft: 0,
bookCompleted: false,
daysLeft: 0,
bookTitle: "",
totalPages: 0,
bookAuthor: "",
bookGenre: "",
};
const userSchema = new Schema(
{
name: {
type: String,
minlength: 6,
maxlength: 255,
},
email: {
type: String,
maxlength: 255,
unique: true,
},
phoneNumber: {
type: String,
},
password: {
type: String,
minlength: 6,
maxlength: 1024,
},
bookReading: {
currentReading: {
type: bookReadingSchema,
default: bookReadingDefault,
},
},
},
{ timestamps: true }
);
module.exports = mongoose.model("User", userSchema);
Will appreciate any help greatly.