![](/img/trans.png)
[英]Mongoose document save fails with “TypeError: Cannot read property 'options' of undefined”
[英]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.