TypeError: Cannot read property 'username' of undefined in node.JS / express cannot post to route

TypeError: Cannot read property 'username' of undefined in node.JS / express cannot post to route

我在发布练习时总是遇到类型错误。这是我的练习路线:

 const router = require("express").Router();
let Exercise = require("../models/exercise.model.js");
//get all exercises
router.get("/", (req, res) => {
  Exercise.find()
    .then(exercises => res.json(exercises))
    .catch(err => res.status(400).json("error: " + err));
});
//add an exercise

router.route("/add").post((res, req) => {
  //parse req.body
  const username = req.body.username;
  const description = req.body.description;
  const duration = Number(req.body.duration);
  const date = Date.parse(req.body.date);
  //create new exercise object
  const newExercise = new Exercise({
    username,
    description,
    duration,
    date
  });
  //save newExercise object
  newExercise
    .save()
    .then(() => res.json("Exercise Added!"))
    .catch(err => res.status(400).json("error: " + err));
});

module.exports = router;

这是我的模型:

const mongoose = require("mongoose");

const Schema = mongoose.Schema;
// create exercise data model
const exerciseSchema = new Schema(
  {
    username: {
      type: String,
      required: true
    },
    description: {
      type: String,
      required: true
    },
    duration: {
      type: Number,
      required: true
    },
    date: {
      type: Date,
      required: true
    }
  },
  {
    timestamps: true
  }
);

const Exercise = mongoose.model("Exercise", exerciseSchema);

module.exports = Exercise;

我尝试将路由更改为 router.post 而不是 router.route,我尝试更改数据模型。

以及我的 server.js:

const express = require("express");
const mongoose = require("mongoose");
const app = express();
const cors = require("cors");

//middleware

app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
require("dotenv").config();

//environment

const port = process.env.PORT || 5000;

//mongoose establish connection

const uri = process.env.ATLAS_URI;
mongoose.connect(uri, {
  useNewUrlParser: true,
  useCreateIndex: true,
  useUnifiedTopology: true
});

const connection = mongoose.connection;

connection.once("open", () => {
  console.log("MongoDB connection established successfully");
});

//routers for users and exercises

const exercisesRouter = require("./routes/exercises");
const usersRouter = require("./routes/users");

app.use("/exercises", exercisesRouter);
app.use("/users", usersRouter);

//error log

app.use(function (err, req, res, next) {
  console.error(err.stack);
  res.status(500).send(`error: ${err}`).next();
});

app.listen(port, () => {
  console.log(`server is up and running on port: ${port}`);
});

这是 Insomnia 中记录的错误:

非常感谢任何帮助!

您在 router.route("/add").post((res, req) => { 中错放了 reqres

修复它:router.route("/add").post((req, res) => {