【问题标题】:When making a POST request for a subdocument it comes back as undefined? mongoose, express当对子文档发出 POST 请求时,它返回为未定义?猫鼬,快递
【发布时间】:2021-02-19 19:01:23
【问题描述】:

我正在尝试发出将新数据保存到我的一个子文档的发布请求,但在尝试访问函数中的子文档时出现错误。它一直以未定义的形式返回。如何通过 id 获取特定用户并为其子文档创建和添加新数据?

型号

const mongoose = require("mongoose");

const Schema = mongoose.Schema;

const ClassworkSchema = new Schema({
    name: String,
    time: Date,
    todo: String,
    isDone: false
});

const OutcomesSchema = new Schema({
    name: String,
    time: Date,
    todo: String, 
    isDone: false,
    isApproved: false
})

const MeetupSchema = new Schema({
    name: String,
    time: Date,
    location: String,
    attended: false
})
const UserSchema = new Schema({
    name: {
      type: String,
      required: true
    },
    email: {
      type: String,
      required: true
    },
    password: {
      type: String,
      required: true
    },
    date: {
      type: Date,
      default: Date.now
    },
    classwork:{type: [ClassworkSchema], default: []},
    outcomes: [OutcomesSchema],
    meetups: [MeetupSchema],
  });



module.exports = User = mongoose.model('users', UserSchema);

控制器

  classworkRouter.post("/:userId/", (req, res) => {
  User.findById(req.params.user_id, (err, user) => {
    if (err) return err;

    new_classwork = new classwork();
    (new_classwork.name = req.body.name),
      (new_classwork.date = req.body.date),
      (new_classwork.todo = req.body.todo),
      (new_classwork.isDone = req.body.isDone);
    console.log(new_classwork);

    user.classwork = {};
    user.classwork.name = req.body.classwork.name;
    user.classwork.todo = user.classwork.todo;

    if (user.classwork === undefined) {
      user.classwork.push(new_classwork);
    } else {
      user.classwork = [new_classwork];
    }

    user.save(function (err, data) {
      if (err) res.send(err);

      res.json({ message: "work added", data: data });
    });
  });
});

您可以在以下照片中看到终端中的错误:

【问题讨论】:

  • 如果你的问题解决了接受我的回答,或者没有解决,发表评论
  • 它将错误更改为 typeError,现在显示“无法设置属性 'classwork' of null”。

标签: node.js express http post mongoose


【解决方案1】:

在这部分代码中

new_classwork = new classwork()

你应该这样定义 new_classwrok :

let new_classwork = new classwork()

并且new classwork()没有定义,你必须在控制器中要求类作业的模型..

在架构文件中导出架构如下:

const User = mongoose.model('users', UserSchema);
const Classwork = mongoose.model('Classwork', ClassworkSchema );

module.exports = {
  User : User ,
  Classwork : Classwork 
}

在 controller.js 中

const {User} = require('../models/certification');
const {Classwork } = require('../models/certification');

在需要模型之后,您可以像这样使用new Crosswork

注意:带大写字符的课业

let new_classwork = new Classwork()

【讨论】:

  • 我修复了这个问题,但我仍然遇到同样的错误
  • 第 85 行是哪一行?
  • 更新了我的答案,你必须要求课后才能使用 new classwork()
  • 我应该在哪里使用require?我不熟悉使用它。
猜你喜欢
  • 2015-01-06
  • 2019-05-19
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-05
  • 2020-10-26
  • 1970-01-01
相关资源
最近更新 更多