猫鼬预保存中间件错误为空对象

问题描述

我有一个Fee模式,用于保存费用支付的详细信息,这些详细信息具有student属性的引用,该属性是对Student模式的引用,告诉谁支付了费用。

const mongoose = require('mongoose');
const Schema   = mongoose.Schema;
const Student  = require('./student');

const fee = new Schema({
  student: { // Student ID
    type: Schema.Types.ObjectId,ref: 'Student'
  },paidFor: {
    type: Date
  },paidOn: {
    type: Date,default: Date.Now
  },due: Number,fine: Number,late: Number,misc: Number,tution: Number,library: Number,admission: Number,development: Number,electricity: Number,examination: Number
});

// This pre save middleware to check if the Student ID belongs to some student or not.
fee.pre('save',function(next) {
  const { student } = this;
  Student.findOne({ _id: student },(error,result) => {
    if (error) {
      return next(new Error(error));
    }
    if (!result) { // If student not found.
      return next(new Error("Student not found."));
    }
    return next();
  });
});

module.exports = new mongoose.model("Fee",fee);

问题出在pre('save')...中间件上。当我为它提供一个有效的student id时,它属于Student集合中的某个文档,它将按预期方式成功通过pre('save')...中间件后将其成功保存。 但是当我给它一个student id集合中不属于任何文档的Student时,它并没有保存我想要的内容但是它给空对象作为错误 。我上面通过时,错误对象没有像"Student not found."这样的消息。

我在Mongoose Docsthis answer中尝试了解决方案,但没有任何效果

请告诉我其背后的原因以及如何解决。谢谢。

解决方法

删除您要传递给struct ContentView: View { private let x: Double = 200.0 private let y: Double = 200.0 private let radius: CGFloat = 100.0 var body: some View { GeometryReader { geo in Rectangle() .foregroundColor(Color.black) Path { path in path.addArc(center: CGPoint(x: self.x,y: self.y),radius: self.radius,startAngle: .degrees(0),endAngle: .degrees(360),clockwise: true) } .fill(RadialGradient( gradient: Gradient(colors: [.red,.blue]),center: UnitPoint( x: CGFloat(self.x / Double(geo.size.width)),y: CGFloat(self.y / Double(geo.size.height)) ),startRadius: self.radius * 0.30,endRadius: self.radius )) } } } 的虚假ID 或者只是让猫鼬创建一个新的mongoose.Schema.ObjectId(*YOUR_STRING_ID*)