首页 > 解决方案 > TypeError:无法读取 node.JS 中未定义的属性“用户名”/快递无法发布到路由

问题描述

发布到我的练习时,我不断收到类型错误。这是我的练习路线:

 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 中记录的错误: 在此处输入图像描述

任何帮助是极大的赞赏!

标签: node.jsmongodbexpressexpress-router

解决方案


你错位了reqresrouter.route("/add").post((res, req) => {

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


推荐阅读