【问题标题】:UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'title' of undefinedUnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“标题”
【发布时间】:2021-05-27 19:28:10
【问题描述】:

我相信错误指向 router.post("/", .... post below.

我正在使用 JavaScript、express、ejs、mongoDB。

这篇文章的目的是让您保存博客文章(我知道的单词选择令人困惑),然后将您重定向到主页(“/”)。我是新人,感谢任何帮助!

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

// app.set("view engine", "ejs");

router.get("/new", (req, res) => {
  res.render("posts/new", { post: new Post() });
});

router.get("/:id", async (req, res) => {
  const post = await Post.findById(req.params.id);
  if (post == null) res.redirect("/");
  res.render("posts/show", { post: post });
});

router.post("/", async (req, res) => {
  let post = new Post({
    title: req.body.title,
    description: req.body.description,
    link: req.body.link,
  });
  try {
    post = await post.save();
    res.redirect(`/posts/${post.id}`);
  } catch (error) {
    console.log("failure to create new post");
    res.render("posts/new", { post: post });
  }
});

module.exports = router;

**EDIT #1 - 下面的代码是我认为与错误相关的 server.js 文件**

const express = require("express");
const mongoose = require("mongoose");
const Post = require("./models/post");
const PostModel = require("./models/post");
const postRouter = require("./routes/post");
const app = express();
require("dotenv").config();

app.set("view engine", "ejs");

const connect = () => {
  const un = process.env.MONGO_USER;
  const pw = process.env.MONGO_PASSWORD;
  return mongoose.connect(
    `mongodb+srv://${un}:${pw}@personalblog.b6isg.mongodb.net/PersonalBlog?retryWrites=true&w=majority`,
    { useNewUrlParser: true, useUnifiedTopology: true }
  );
};
connect().then(async (connection) => {
  const createdPost = Post.create();
  console.log(createdPost);
  console.log(connect());
});

app.get("/", async (req, res) => {
  const post = await Post.find().sort({ createdAt: "desc" });
  res.render("posts/index", { post: post });
});

app.use("/posts", postRouter);

app.use(express.urlencoded({ extended: false }));
app.listen(4000);

【问题讨论】:

  • 你能显示你发送的请求正文吗?
  • 表示req.body 未定义
  • 嗨@JerinDJoy 我添加了我相信你要求的代码。感谢您的帮助:)

标签: javascript mongodb express ejs


【解决方案1】:

req.body 在您的路由器中未定义,导致此问题。

在您的 app.js 中,尝试添加:

app.use(bodyParser.urlencoded({
    extended: true
}))
app.use(bodyParser.json())

然后再次发送请求。

【讨论】:

    【解决方案2】:

    根据您的编码,您使用称为 json 请求的正文

    router.post("/", async (req, res) => {
      let post = new Post({
        title: req.body.title,
        description: req.body.description,
        link: req.body.link,
      });
      try {
        post = await post.save();
        res.redirect(`/posts/${post.id}`);
      } catch (error) {
        console.log("failure to create new post");
        res.render("posts/new", { post: post });
      }
    });
    

    所以在你的服务器 js 中,为 json 注册中间件

    // urlencoded parsing
    app.use(express.urlencoded({ extended: false }));
    // json parsing
    app.use(express.json());
    

    【讨论】:

      猜你喜欢
      • 2021-05-20
      • 2021-04-18
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 2021-05-18
      • 2021-01-15
      • 2021-03-03
      相关资源
      最近更新 更多