繁体   English   中英

Mongoose 无法创建新文档:无法读取未定义的属性“get”

[英]Mongoose failing to create new document: Cannot read property 'get' of undefined

您好,我对猫鼬相当陌生,所以我真的不明白为什么会出现此错误,因此我为我的数据创建了一个如此简单的模型模式,借此我接收用户信息,因此我尝试点击要创建的 url 端点一个用户我在下面得到以下信息 我可以请帮助以了解我的代码可能出错的地方,因为我在这里有点迷失

(node:18337) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'get' of undefined
    at ServerResponse.json (/home/junior/Web-Projects/OnlineStore/server/node_modules/express/lib/response.js:257:20)
    at ServerResponse.send (/home/junior/Web-Projects/OnlineStore/server/node_modules/express/lib/response.js:158:21)
    at /home/junior/Web-Projects/OnlineStore/server/Routes/UserAuthRoute/userAuth.js:32:14
    at processTicksAndRejections (internal/process/task_queues.js:93:5)
(Use `node --trace-warnings ...` to show where the warning was created)
(node:18337) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:18337) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

我可以在这里获得一些帮助以了解我的错误在哪里吗

下面的代码是我用户的模型架构

    const mongoose = require("mongoose");

    const userSchema = new mongoose.Schema({
      _id: mongoose.Schema.Types.ObjectId,
      name: { type: String, required: true },
      email: { type: String, required: true, unique: true },
      password: { type: String, required: true },
      isAdmin: { type: Boolean, required: true, default: false },
    });

    const userModel = mongoose.model("User", userSchema);

    module.exports = userModel;

下面的代码是我为用户制作路线的地方

    const mongoose = require("mongoose");
    const express = require("express");
    const router = express.Router();
    const User = require("./userModel");
    const { response } = require("express");
    const bodyParser = require("body-parser");

    router.use(bodyParser.json());
    router.use(bodyParser.urlencoded({ extended: true }));
    require("dotenv").config();

    const mongoURI = process.env.MONGO_URI;

    mongoose
      .connect(mongoURI, {
        useNewUrlParser: true,
        useUnifiedTopology: true,
        useCreateIndex: true,
      })
      .catch((error) => console.log(error.reason));

    router.get("/users/create-admin", async (request, resposne) => {
      try {
        const user = new User({
          name: "test",
          email: "test@gmail.com",
          password: "12345",
          isAdmin: true,
        });
        const newUser = await user.save();
        response.send(newUser);
      } catch (error) {
        response.send({ message: error.message });
      }
    });

    module.exports = router;

现在这是我整个后端代码的 server.js 文件入口点

    const express = require("express");
    const cors = require("cors");
    const productRoute = require("./Routes/ProductsRoute/products");
    const userRoute = require("./Routes/UserAuthRoute/userAuth");
    const bodyParser = require("body-parser");
    const app = express();

    // MiddleWare
    app.use(cors());

    //Fetch Product Route
    app.use(userRoute);
    app.use(productRoute);

    require("dotenv").config();
    const port = process.env.PORT || 3001;

    app.listen(port, () => {
       console.log(`Server started on port ${port}`);
    });

这是 mongoose 的完整 Restfull API。

const express = require("express"),
  mongoose = require("mongoose"),
  bodyParser = require("body-parser");

const app = express();
app.use(bodyParser.urlencoded({ extended: false }));

mongoose.connect("mongodb://localhost:27017/blog", {
  useCreateIndex: true,
  useUnifiedTopology: true,
  useNewUrlParser: true,
  useFindAndModify: false,
});

const PostSchema = mongoose.Schema({
  title: String,
  content: String,
});

const Post = mongoose.model("post", PostSchema);

app.get("/", (req, res) => {
  res.send("Home Route");
});

//Create Post

app.post("/post", (req, res) => {
  const { title, content } = req.body;

  const newPost = new Post({
    title,
    content,
  });
  newPost.save((err) => {
    if (err) {
      res.send({ msg: err.msg });
    }
    res.send(newPost);
  });
});

//Find All Posts

app.get("/post", (req, res) => {
  Post.find({}, (err, posts) => {
    if (err) {
      return res.send(err.message);
    }

    res.send(posts);
  });
});

//Find post by id

app.get("/post/:id", (req, res) => {
  Post.findById(req.params.id, (err, post) => {
    if (err) {
      return res.send(err.message);
    }

    if (!post) {
      return res.send("Post not found");
    }

    res.send(post);
  });
});

//Patch post

app.patch("/post/:id", (req, res) => {
  const { title, content } = req.body;
  Post.findOneAndUpdate(
    { _id: req.params.id },
    { $set: { title, content } },
    (err, doc, res) => {
      if (err) {
        return res.send(err.msg);
      }
      res.send("Post Updated");
    }
  );
});

//Delete post
app.delete("/post/:id", (req, res) => {
  Post.findOneAndRemove({ _id: req.params.id }, (err) => {
    if (err) {
      return res.send(err.msg);
    }

    res.send("Post Deleted");
  });
});

app.listen(3000, () => console.log("Server is running on port 3000"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM