解决快递请求中的UnhandledPromiseRejectionWarning [英] Resolving UnhandledPromiseRejectionWarning in express post request

查看:398
本文介绍了解决快递请求中的UnhandledPromiseRejectionWarning的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试向服务器(mongodb)发出发布请求,但出现此错误:

I am trying to make a post request to the server (mongodb) but I get this error:

UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性"todo_description"

UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'todo_description' of undefined

我在本地主机上运行mongodb

I am running mongodb on my localhost

// Require Express
const express = require("express");

// Setting Express Routes
const router = express.Router();

// Set Up Models
const Todo = require("../models/todo");

// Get All Todos
router.get("/", async (req, res) => {
  try {
    const todo = await Todo.find();
    res.json(todo);
  } catch (err) {
    res.json({ message: err });
  }
});

router.get("/:id", async (req, res) => {
  try {
    const id = req.params.id;
    await Todo.findById(id, (err, todo) => {
      res.json(todo);
    });
  } catch (err) {
    res.json({ message: err });
  }
});

router.post("/add", async (req, res) => {
  const todo = new Todo({
    todo_description: req.body.todo_description,
    todo_responsible: req.body.todo_responsible,
    todo_priority: req.body.todo_priority,
    todo_completed: req.body.todo_completed,
  });

  try {
    await todo.save();
    res.json(todo);
  } catch (err) {
    res.json({ message: err });
  }
});

router.patch("/update/:id", async (req, res) => {
  try {
    const updateTodo = await Todo.updateOne(
      { _id: req.params.id },
      { $set: { todo_description: req.body.todo_description } }
    );
    updateTodo.save().then(updateTodo => {
      res.json(updateTodo);
    });
  } catch (err) {
    res.json({ message: err });
  }
});

router.delete("/delete/:id", async (req, res) => {
  try {
    const deleteTodo = await Todo.deleteOne({ _id: req.params.id });
    res.json(deleteTodo);
  } catch (err) {
    res.json({ message: err });
  }
});

module.exports = router;

我的待办事项模型

// Require Mongoose
const mongoose = require("mongoose");

// Define Schema
// const Schema = new mongoose.Schema;

// Define Todo-Schema
const TodoSchema = new mongoose.Schema({
  // Creating Fields
  todo_description: {
    type: String
  },
  todo_responsible: {
    type: String
  },
  todo_priority: {
    type: String
  },
  todo_completed: {
    type: Boolean
  },
  todo_date: {
    type: Date,
    default: Date.now
  }
});

// Compile Model From Schema
// const TodoModel = mongoose.model("Todos", TodoSchema);

// Export Model
module.exports = mongoose.model("todos", TodoSchema);

错误消息:

(节点:548)UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性"todo_description" 在router.post(C:\ Users \ kinG \ Desktop \ projects \ protoinofprototype \ mern \ backend \ routes \ todo.js:33:32) 在Layer.handle [作为handle_request](C:\ Users \ kinG \ Desktop \ projects \ mountain-of-prototype \ mern \ backend \ node_modules \ express \ lib \ router \ layer.js:95:5)

(node:548) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'todo_description' of undefined at router.post (C:\Users\kinG\Desktop\projects\mountain-of-prototype\mern\backend\routes\todo.js:33:32) at Layer.handle [as handle_request] (C:\Users\kinG\Desktop\projects\mountain-of-prototype\mern\backend\node_modules\express\lib\router\layer.js:95:5)

谢谢

推荐答案

您正在从req.body访问todo_description.仅当您添加body-parser中间件或自己添加类似的中间件时,req.body才可用.

You are accessing todo_description from req.body. req.body will only be available if you add the body-parser middleware or add a similar one yourself.

在加载路线之前添加此内容:

Add this right before your routes are loaded :

const bodyParser = require('body-parser');
const express = require('express');

const app = express();

app.use(bodyParser.json());

您也可以将其添加到特定路线.在此处了解更多信息.

You can also add this to a specific route. Read more about it here.

这篇关于解决快递请求中的UnhandledPromiseRejectionWarning的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆