Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未处理的PromisejectionWarning:TypeError:无法读取属性';标题';未定义的_Javascript_Mongodb_Express_Ejs - Fatal编程技术网

Javascript 未处理的PromisejectionWarning:TypeError:无法读取属性';标题';未定义的

Javascript 未处理的PromisejectionWarning:TypeError:无法读取属性';标题';未定义的,javascript,mongodb,express,ejs,Javascript,Mongodb,Express,Ejs,我相信错误是指向路由器的。post(“/”,…post如下 我正在使用JavaScript、express、ejs和mongoDB 这篇文章的目的是让你保存一篇博客文章(我知道的单词选择很混乱),然后将你重定向到主页(“/”)。我是一个新手,非常感谢你的帮助 const express = require("express"); const Post = require("../models/post"); const router = express.R

我相信错误是指向路由器的。post(“/”,…post如下

我正在使用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;

**编辑#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在路由器中未定义,导致此问题

在app.js中,尝试添加:

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

然后再次发送请求。

根据您的编码,您使用称为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());

您能显示您发送的请求正文吗?这意味着
req.body
未定义dhi@JerinDJoy我添加了我认为您需要的代码。感谢您的帮助:)