Nodejs 和 mongoose 错误,数据未保存在 mongodb 上并返回默认模式值,尽管在 postman 上返回成功响应

问题描述 投票:0回答:1

我正在使用 nodejs 发出此请求,下面是我的 nodejs 代码和猫鼬模式。该请求给出了成功响应,但返回一个空值,我的 mongodb 数据库中也没有存储任何数据。这是我的 Nodejs 代码 App.js

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"));

Auth.js

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;

/models/user.js

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);

我希望我的代码能够在使用代码发出任何发布请求时保存我的数据。

javascript node.js mongodb api mongoose-schema
1个回答
0
投票

我不太明白你的问题,缺少代码片段,我只看到书籍端点。不是您要评论的用户?

© www.soinside.com 2019 - 2024. All rights reserved.